3、泛型-泛型代码和虚拟机

Java 泛型 02:泛型和虚拟机(类型擦除) JVM 中没有泛型,只有普通的类和方法。在 JVM 中所有的类型参数都用它们的限定类型替换。桥方法被合成来保持多态。为保持类型安全性,必要时插人强制类型转换。最后,需要注意的是,擦除的类其实仍然保留了一些泛型祖先的微弱记忆。例如, 擦除后原始的 Person 类知道它源于泛型类 Person(但无法区分是由 Person< String > 构造的还是由 Person< Double > 构造的)。 阅读详情

泛型代码和虚拟机

虚拟机没有泛型类型,只有普通的类和方法。无论何时定义一个泛型类型,都自动提供一个相应的原始类型。原始类型的名字就是删除类型参数后的泛型类型名。擦除类型变量,并替换为限定类型,无限定类型的变量用Object。

Pair<T>的原始类型,因为T是一个无限定的变量,所有直接用Object替换。

public class Pair {
    private  Object first;
    private  Object second;

    public Pair() {
        first=null;
        second=null;
    }

    public Pair(Object firsObject, Object second) {
        this.first = firsObject;
        this.second = second;
    }

    public Object geObjectFirsObject() {
        return first;
    }

    public void seObjectFirsObject(Object firsObject) {
        this.first = firsObject;
    }

    public Object geObjectSecond() {
        return second;
    }

    public void seObjectSecond(Object second) {
        this.second = second;
    }
}

如果有限定类型,就用第一个限定的类型变量来替换。比如Pair<T extends Comparable & Serializable >

public class Pair {
    private Comparable first;
    private Comparable second;

    public Pair() {
        first=null;
        second=null;
    }

    public Pair(Comparable first, Comparable second) {
        this.first = first;
        this.second = second;
    }
}    

如果切换限定列表,Pair<T extends Serializable & Comparable>,原始类型就用Serializable替换T,为了提高效率,应该讲标签接口(即没有方法的接口)放在类别的末尾。

翻译泛型表达式

当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。

Pair<Employee> buddies = new Pair();
Employee buddy = buddies.getFirst();

擦除getFirst的返回类型后将返回Object类型,编译器自动插入Employee的强制类型转换,也就是说,编译器把这个方法调用翻译为两条虚拟机指令:

  • 对原始方法Pair.getFirst的调用。
  • 将返回的Object类强制转换为Employee类型。
【Java】泛型与集合篇 —— 泛型 定义泛型类时,通过尖括号 声明类型参数,T 可以是类、接口、数组类型(基本数据类型需使用包装类型)。使用时,需指定具体的类型参数。泛型方法在方法返回值前声明类型参数 ,其作用域仅限于该方法。 阅读详情

相关推荐

PyTorch+C3D实战:用UCF101数据集训练你的第一个视频动作识别模型(附完整代码)

本文详细介绍了如何使用PyTorch和C3D模型在UCF101数据集上构建视频动作识别系统。从环境配置、数据预处理到模型训练与优化,提供了完整的代码实战指南,帮助开发者快速掌握视频行为识别技术。文章特别强调了3D卷积核设计、混合精度训练等关键技术要点,并分享了模型部署优化经验。

weixin_29233857的博客 218

以下说法错误的是()

以下说法错误的是() A. 虚拟机中没有泛形,只有普通类和普通方法 B. 所有泛型类的类型参考在编译时都会被擦除 C. 创建泛型对象时,请指明类型,让编译器今早的做参数检查 D. 泛型的类型擦除机制意味着不能在运行时动态获取List中的T实际类型 答案:D 解析: 1.虚拟机中没有泛型,只有普通类和普通方法 2.所有泛型类的类型参数在编译时都会被擦除 3.创建泛型对象时请指明类型,让编译器尽早的做...

weixin_43398271的博客 2398

NCCL使用指南-进阶篇

前文介绍了NCCL的常用环境变量,本文介绍了NCCL-test性能基准测试,以及一些大规模集群测试的经验数据。

father_yingying的博客 1407

虚拟机是如何实现泛型的

泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样

IT三明治的专栏 822

2023年数学建模国赛三大赛题核心建模思路与实战代码全解

本文全面解析2023年数学建模国赛三大赛题的核心建模思路与实战代码,涵盖塔式太阳能光热发电系统优化、多波束测深系统动态规划及蔬菜商品化策略建模。通过Python代码示例和优化算法(如遗传算法、NSGA2)展示,帮助参赛者掌握数学建模的关键技术与实战技巧,提升竞赛成绩。

weixin_33713350的博客 336

LTR-390UV-01对比VEML6075:5个真实项目中的选型避坑指南

本文对比了LTR-390UV-01和VEML6075两款环境光传感器在5个真实项目中的表现,提供了选型避坑指南。通过智能手环、农业温室、紫外线消毒柜等场景的实测数据,分析了动态范围、抗干扰性、温度稳定性等关键差异,帮助开发者在成本与性能间做出最优选择。

weixin_28733777的博客 220

泛型代码和虚拟机

泛型代码和虚拟机虚拟机没有泛型类型对象—所有对象都属于普通类。 接下来的部分,你将看到编译器是如何“擦除”类型参数的?这个过程对Java程序员有什么影响?1.类型擦除无论何时定义一个泛型类型,都自动提供了一个相应的原始类型(raw type)。原始类型的名字就是删除类型参数后的泛型类型名。类型变量被擦除(erased),并被其限定类型替代(无限定的变量用Object)。例如,泛型类型Pair<T>

qiongleee的博客 397

线性调频LFM脉冲压缩 连续波雷达仿真&线性调频信号仿真分析压缩matlab程序源码

13、线性调频信号(LFM)压缩感知的稀疏与重构算法(OMP)的matlab仿真程序(一个可以在matlab上运行的压缩感知实例;8、具有多普勒频移的线性调频信号(知道带宽、采样频率、T使用MATLAB仿真线性调频信号即LFM,同时具有多普勒频移时,匹配滤波后的波形变化。19、CW脉冲和LFM信号Matlab仿真(这是matlab仿真程序,实现了常规雷达信号CW和线性调频信号LFM的仿真)18、lfm信号模糊函数图 matlab(用matlab 实现的线性调频信号信号(lfm)的模糊函数图)

2301_77866396的博客 401

4.泛型与虚拟机

[1]虚拟机中没有泛型,只有普通的类和方法 [2]所有的类型参数都用它们的限定类型替换 无论何时定义一个泛型类型,都自动提供了一个相应的原始类型。原始类型的名字就是删去类型参数后的泛型类型名。擦除类型变量,并替换为限定类型(无限定的变量用 Object) 如Pair的原始类型: public class Pair { private Object first; pr...

yztfst的博客 718

【系统分析师】高分论文:论面向对象设计方法及应用

本文以某市职业院校合并后的信息化系统建设项目为例,探讨了面向对象设计方法在系统开发中的应用。作为系统分析师,作者在415.6万元、6个月工期的项目中,通过遵循单一职责原则(简化构件库)、依赖倒置原则(开发公共接口)和开闭原则(构件扩展)等设计原则,成功完成了5个子系统融合改造和4个智慧实训室建设。项目采用J2EE分层设计和SOA架构,最终在2022年11月顺利上线,提升了教学管理效率,获得用户好评。文章总结了设计原则对提高系统复用性、可维护性的重要作用,同时也反思了部署过程中的经验教训。

数据知道的博客 7955

【Claude】Auto Mode 触发安全分类器拦截的三种错误变体及对应处理 bug报错已解决

深度解析Claude Auto Mode安全分类器拦截的三种变体:内容拒绝、操作中断、累积触发,含完整排查流程与绕过策略。

博客 7596

DNGuard.HVM 3.6 Net企业级加密

DNGuard.HVM 3.6 Net企业级加密 去发现同类优质开源项目:https://gitcode.com/ DNGuard HVM是一款功能强大的.Net平台加密工具,其核心采用纯虚拟机处理层技术,提供对32位.Net框架版本(包括Net 1.1、2.0、3.0、3.5及其所有子版本,如beta、xCTPRCsp、x等)的全面兼容。本工具特别支持泛型方法的加密,同时,其加密保护过程不依赖i...

gitblog_06716的博客 395

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2887

泛型是什么?

泛型,一个所有人都知道怎么用,在JAVA世界老生常谈的特性。更需要知其然,知其所以然。

Steins Gate 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java中的泛型以及JVM是如何实现泛型的?

Java中的泛型泛型是什么泛型类泛型接口泛型方法为什么我们需要泛型?虚拟机是如何实现泛型的?使用泛型注意事项(作为了解) 泛型是什么 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理 解呢? 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形 参),然后在使用/调用时传入...

深入Java世界:探索编程之美与技术深度 1638

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java泛型深入学习和总结 看这一篇就足够!

Java语言高级特性前言 java知识是作为Android开发的语言基础,虽然现在我们已经推出了kotlin,但是基于以下原因我们还是需要好好牢牢掌握java: 1)SDK还是改成java,kotlin也需要编译成为java运行; 2)目前大量的第三方库和继承与前任的代码都是java所写的; 3)Java语言应用不仅仅在Android,就是在后台开发中也是一个最流行的语言; 4)大公司面...

许进进的博客 6066

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

8.5 泛型代码和虚拟机

虚拟机没有泛型类型对象 – 所有对象都属于普通类。

StarPlatinum2的博客 649

【6】Java泛型:泛型的基本概念和使用

现在开始深入学习Java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用。泛型在java中,是一个十分重要的特性,所以要好好的研究下。一、泛型的基本概念什么是泛型?泛型的定义:泛型==参数化类型泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。什么是参

happy_horse的博客 3928

Java学习day055 泛型代码和虚拟机(类型擦除、翻译泛型表达式、翻译泛型方法、调用遗留代码)

使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。 day055 泛型代码和虚拟机(类型擦除、翻译泛型表达式、翻译泛型方法、调用遗留代码) 虚拟机没有泛型类型对象 —所有对象都属于普通类。 1.类型擦除 无论何时定义一个泛型类型,都自动提供了一个相应的原始类型(raw type)。原始类型的名字就是删去类型参数后的泛型类型名。擦除(era...

Zzehao的博客 389

Java泛型,真实泛型和伪泛型

1、什么是泛型? 泛型是JDK1.5的一项新增特性,本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数。泛型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。 2、为什么要使用泛型,用Object不行吗? 如果没有使用泛型,而是使用Object,那么只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化。 同时,使用Object就有可能转...

bug的博客 1783

Java泛型

一、泛型介绍 1. 背景 2. 概念 3. 好处 二、泛型声明 三、类型擦除 1. 什么是类型擦除 桥接方法 2. 为何需要类型擦除 3. 类型信息并未完全擦除 四、泛型使用 1. 泛型类 2. 泛型接口 3. 泛型方法 五、泛型扩展 1. 泛型的上下边界 泛型的上边界 泛型的下边界

骑个小蜗牛的博客 7575

Java 泛型详解:泛型类、泛型方法、泛型接口、类型擦除与类型通配符

本文全面解析Java泛型,这是JDK1.5引入的类型参数化机制,通过`<类型>`语法实现编译期类型安全,运行期经“类型擦除”保障性能。内容涵盖泛型类、方法、接口的定义、语法与实现方式,详解无界、上界、下界通配符的特性与用法,分析类型擦除原理及泛型关键规则(如参数化类型无继承、泛型运行时擦除等)。掌握泛型可提升代码安全、可读性与复用性,是Java开发者进阶必备技能。

Vivian_0682的博客 1547

Java 泛型:深入理解泛型的类型擦除

泛型代码和虚拟机 Java 中的的泛型是伪泛型,为什这么说呢?因为 Java 在编译期间,所有的泛型信息都被擦除掉。称为类型擦除(type erasure) 在 Java 虚拟机中没有泛型类型对象 – 所有对象都是属于普通类 , 所以我们要了解一下 类型擦除 的概念。 1. 类型擦除 无论何时定义一个泛型类型,都会自动提供一个响应的 原始类型 (raw type)(不存在泛型 )。原始类型的名字...

Strange_Monkey的博客 3167

泛型屋

一、泛型 1、泛型的优点 保证类型安全,使运行期错误提前到编译器 消除强制类型转换(如果没有泛型,认为是一个Object,在转换时,非常容易出现ClassCastException) 二、泛型定义 1、泛型在类上 实例看集合类 public interface List<E> extends Collection<E> {...

黑夜的触手 1505

泛型的使用

泛型最大的好处是实现类型安全,也就是说在编译期就可以检查出类型错误,而不需要等到运行时才发现。

qq_42426725的博客 1185
上一篇: 2、泛型-泛型的约束与局限性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值