K:注解简介

NN-Descent构建K近邻图——论文超详细注解 论文题目 Efficient K-Nearest Neighbor Graph Construction for Generic Similarity Measures 相关信息 作者与单位 Wei Dong(wdong@cs.princeton.edu); Moses Charikar(moses@cs.princeton.edu); Kai Li(li@cs.princeton.edu). D... 阅读详情

@转载自:http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html

什么是注解(Annotation):

Annotation(注解)注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。

Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。从某些方面 看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在Annotation的“name=value”结构对中。

Annotation的成员在Annotation类型中以无参数的方法的形式被声明。其方法名和返回值定义了该成员的名字和类型。在此有一个特定的默认语法:允许声明任何Annotation成员的默认值:一个Annotation可以将 name=value对作为没有定义默认值的Annotation成员的值,当然也可以使用name=value对来覆盖其它成员默认值。这一点有些近似类的继承特性,父类的构造函数可以作为子类的默认构造函数,但是也可以被子类覆盖。

Annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的信息。需要注意的是,这里存在着一个基本的规则:Annotation不能影响程序代码的执行,无论增加、删除 Annotation,代码都始终如一的执行。另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在工作时忽略了这些annotation。正是由于 java虚拟机忽略了Annotation,导致了annotation类型在代码中是“不起作用”的; 只有通过某种配套的工具才会对annotation类型中的信息进行访问和处理。本文中将涵盖标准的Annotation和meta- annotation类型,陪伴这些annotation类型的工具是java编译器(当然要以某种特殊的方式处理它们)。

什么是metadata(元数据):

  元数据从metadata一词译来,就是“关于数据的数据”的意思。
  元数据的功能作用有很多,比如:你可能用过Javadoc的注释自动生成文档。这就是元数据功能的一种。总的来说,元数据可以用来创建文档,跟踪代码的依赖性,执行编译时格式检查,代替已有的配置文件。如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类:
1. 编写文档:通过代码里标识的元数据生成文档
2. 代码分析:通过代码里标识的元数据对代码进行分析
3. 编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查
  在Java中元数据以标签的形式存在于Java代码中,元数据标签的存在并不影响程序代码的编译和执行,它只是被用来生成其它的文件或在运行时对运行代码进行描述的信息。
  综上所述:
    第一,元数据以标签的形式存在于Java代码中。
    第二,元数据描述的信息是类型安全的,即元数据内部的字段都是有明确类型的。
    第三,元数据需要编译器之外的工具额外的处理用来生成其它的程序部件。
    第四,元数据可以只存在于Java源代码级别,也可以存在于编译之后的Class文件内部。

 Annotation和Annotation类型:

Annotation:

Annotation使用了在java5.0所带来的新语法,它的行为十分类似public、final这样的修饰符。每个Annotation具有一个名字和成员个数>=0。每个Annotation的成员具有被称为name=value对的名字和值(就像javabean一样),name=value装载了Annotation的信息。

Annotation类型:

Annotation类型定义了Annotation的名字、类型、成员默认值。一个Annotation 类型可以说是一个特殊的java接口,它的成员变量是受限制的,而声明Annotation类型时需要使用新语法。当我们通过java反射api访问 Annotation时,返回值将是一个实现了该 annotation类型接口的对象,通过访问这个对象我们能方便的访问到其Annotation成员。后面的章节将提到在java5.0的 java.lang包里包含的3个标准Annotation类型。

注解的分类:

  根据注解参数的个数,我们可以将注解分为三类:
1.标记注解:一个没有成员定义的Annotation类型被称为标记注解。这种Annotation类型仅使用自身的存在与否来为我们提供信息。比如后面的系统注解@Override;元注解@Documented等
2.单值注解
3.完整注解

  根据注解使用方法和用途,我们可以将Annotation分为三类:
1.JDK内置系统注解
2.元注解
3.自定义注解

 系统内置标准注解:

  注解的语法比较简单,除了@符号的使用外,他基本与Java固有的语法一致,JavaSE中内置三个标准注解,定义在java.lang中:
@Override:用于修饰此方法覆盖了父类的方法;
@Deprecated:用于修饰已经过时的方法;
@SuppressWarnnings:用于通知java编译器禁止特定的编译警告。

  下面我们依次看看三个内置标准注解的作用和使用场景。

 @Override,限定重写父类方法:

@Override 是一个标记注解类型,它被用作标注方法。它说明了被标注的方法重写了父类的方法,起到了断言的作用。如果我们使用了这种Annotation在一个没有覆盖父类方法的方法时,java编译器将以一个编译错误来警示。这个annotaton常常在我们试图覆盖父类方法而怕又写错了方法名时发挥威力。使用方法极其简单:在使用此annotation时只要在被修饰的方法前面加上@Override即可。下面的代码是一个使用@Override修饰一个企图重载 父类的displayName()方法,而又存在拼写错误的实例:

public class Fruit {

 

    public void displayName(){

        System.out.println("水果的名字是:*****");

    }

}

class Orange extends Fruit {

    @Override

    public void displayName(){

        System.out.println("水果的名字是:桔子");

    }

}

class Apple extends Fruit {

    @Override

    public void displayname(){//displayName才是父类中的方法

        System.out.println("水果的名字是:苹果");

    }

}

Orange 类编译不会有任何问题,Apple 类在编译的时候会提示相应的错误。@Override注解只能用于方法,不能用于其他程序元素。

 

@Deprecated,标记已过时:

  同样Deprecated也是一个标记注解。当一个类型或者类型成员使用@Deprecated修饰的话,编译器将不鼓励使用这个被标注的程序元素。而且这种修饰具有一定的 “延续性”:如果我们在代码中通过继承或者覆盖的方式使用了这个过时的类型或者成员,虽然继承或者覆盖后的类型或者成员并不是被声明为 @Deprecated,但编译器仍然要报警。

  值得注意,@Deprecated这个annotation类型和javadoc中的 @deprecated这个tag是有区别的:前者是java编译器识别的,而后者是被javadoc工具所识别用来生成文档(包含成员为什么已经过时、它应当如何被禁止或者替代的描述)。

  在java5.0,java编译器仍然象其从前版本那样寻找@deprecated这个javadoc tag,并使用它们产生警告信息。但是这种状况将在后续版本中改变,我们应在现在就开始使用@Deprecated来修饰过时的方法而不是 @deprecated javadoc tag。

  下面一段程序中使用了@Deprecated注解标示方法过期,同时在方法注释中用@deprecated tag 标示该方法已经过时,代码如下:

 class AppleService {

    public void displayName(){

        System.out.println("水果的名字是:苹果");

    }

    

    /**

     * @deprecated 该方法已经过期,不推荐使用

     */

    @Deprecated

    public void showTaste(){

        System.out.println("水果的苹果的口感是:脆甜");

    }

    

    public void showTaste(int typeId){

        if(typeId==1){

            System.out.println("水果的苹果的口感是:酸涩");

        }

        else if(typeId==2){

            System.out.println("水果的苹果的口感是:绵甜");

        }

        else{

            System.out.println("水果的苹果的口感是:脆甜");

        }

    }

}

public class FruitRun {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

        Apple apple=new Apple();

        apple.displayName();    

        

        AppleService appleService=new AppleService();

        appleService.showTaste();

        appleService.showTaste(0);

        appleService.showTaste(2);

    }

 

}

AppleService类的showTaste() 方法被@Deprecated标注为过时方法,在FruitRun类中使用的时候,编译器会给出该方法已过期,不推荐使用的提示。

@SuppressWarnnings,抑制编译器警告:

@SuppressWarnings 被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。在java5.0,sun提供的javac编译器为我们提供了-Xlint选项来使编译器对合法的程序代码提出警告,此种警告从某种程度上代表了程序错误。例如当我们使用一个generic collection类而又没有提供它的类型时,编译器将提示出"unchecked warning"的警告。通常当这种情况发生时,我们就需要查找引起警告的代码。如果它真的表示错误,我们就需要纠正它。例如,如果警告信息表明我们代码中 的switch语句没有覆盖所有可能的case,那么我们就应增加一个默认的case来避免这种警告。
  有时我们无法避免这种警告,例如,我们使用必须和非generic的旧代码交互的generic collection类时,我们不能避免这个unchecked warning。此时@SuppressWarning就要派上用场了,在调用的方法前增加@SuppressWarnings修饰,告诉编译器停止对此方法的警告。
SuppressWarning不是一个标记注解。它有一个类型为String[]的成员,这个成员的值为被禁止的警告名。对于 javac编译器来讲,被-Xlint选项有效的警告名也同样对@SuppressWarings有效,同时编译器忽略掉无法识别的警告名。
annotation语法允许在annotation名后跟括号,括号中是使用逗号分割的name=value对用于为annotation的成员赋值。实例如下:

 

public class FruitService {

    

    @SuppressWarnings(value={ "rawtypes", "unchecked" })

    public static  List<Fruit> getFruitList(){

        List<Fruit> fruitList=new ArrayList();

        return fruitList;

    }

    

    @SuppressWarnings({ "rawtypes", "unchecked" })

    public static  List<Fruit> getFruit(){

        List<Fruit> fruitList=new ArrayList();

        return fruitList;

    }

 

    @SuppressWarnings("unused")

    public static void main(String[] args){

        List<String> strList=new ArrayList<String>();

    }

}

  在这个例子中SuppressWarnings annotation类型只定义了一个单一的成员,所以只有一个简单的value={...}作为name=value对。又由于成员值是一个数组,故使用大括号来声明数组值。注意:我们可以在下面的情况中缩写annotation:当annotation只有单一成员,并成员命名为"value="。这时可以省去"value="。比如将上面方法getFruit()的SuppressWarnings annotation就是缩写的。

  SuppressWarnings注解的常见参数值的简单说明:

1.deprecation:使用了不赞成使用的类或方法时的警告;
2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型;
3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
4.path:在类路径、源文件路径等中有不存在的路径时的警告;
5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
6.finally:任何 finally 子句不能正常完成时的警告;
7.all:关于以上所有情况的警告。

 

ElaticSearchUtil工具类封装 package com.xxx.util; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction; import org.elasticsearch.action.ad 阅读详情

相关推荐

智能环境感知:STM32多传感器数据融合与报警策略设计

本文详细介绍了基于STM32的多传感器数据融合系统设计,整合DHT11温湿度传感器、MQ-2烟雾检测和光照强度检测模块,通过智能算法实现环境感知与动态报警。系统采用数据滤波、多传感器校验和自适应阈值策略,显著提升监测精度与可靠性,并通过OLED显示屏提供清晰的多级报警界面。

plant的博客 202

K:注解语法简介

@转载自:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 注解分为元注解(meta-annotation)和自定义注解 元注解: 元注解:是负责注解(动词)其它注解(名词)的注解(名词)。 java5.0中有4个标准的注解。它用来对其它annotation类型作说明 1.@Target 2.@Retention

MyStringIsNotNull的博客 396

报错:subprocess.CalledProcessError: Command ‘[‘where‘, ‘cl‘]‘ returned non-zero exit status 1.

右键此电脑--属性--高级系统设置--环境变量--系统变量--找到Path。Enterprise是企业版,如果你是社区版就找Community。2.安装的时候,c++桌面那个需要勾选。

2301_77554343的博客 1507

Java 简单笔记——注解

注解一、概述二、三个基本的Annotation1.@Override2.@Deprecated 一、概述 从JDK5.0开始,Java新增加了对元数据(MetaData)的支持,也就是注解(Annotation) 注解其实就是代码中的特殊标记,这些特殊标记可以在类加载、编译、运行时被读取,并执行相应的处理。使用注解最大的作用就是在不改变原程序逻辑的情况下添加补充信息。 Annotation可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存在Annotat

Jiashun Hao的博客 1万+

大语言模型在构建UNSPSC 分类数据中的应用

UNSPSC 是联合国标准产品和服务代码。本文研究如何利用大语言模型生成分类系统的分析

姚家湾博客 1874

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

Java注解之 @Target、@Retention、@Documented简介

先来看一个Spring中的一个常用注解 package org.springframework.stereotype; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann...

笔落墨成&博客 343

基于点云数据的统计滤波算法改进

随着三维视觉和点云处理技术的发展,点云数据在机器人、自动驾驶、增强现实等领域得到了广泛应用。而点云数据中常常包含着各种噪声和异常点,这些噪声和异常点会影响后续的数据处理和分析任务。因此,对点云数据进行滤波处理是必不可少的一步。在点云滤波算法中,统计滤波(Statistical Filtering)是一种常见且有效的方法。它通过对点云数据进行统计分析,将噪声和异常点剔除或修复,从而得到更为准确和可靠的点云数据。本文将介绍一种改进的统计滤波算法,并提供相应的源代码实现。

QfcaLinux的博客 292

Matlab实现Kmeans算法(每行代码标注详细注解)

本文主要为了完成平日作业,并进一步加深对算法的理解。也希望对来访的读者有所帮助。 目录 一、什么是Kmeans算法 二、Kmeans算法的意义 三、Kmeans算法代码解析 1.关键概念 2.大致思路 3.对照每行代码的详细注解 四、总结 总结 一、什么是Kmeans算法 二、Kmeans算法的意义 三、Kmeans算法代码解析 1.关键概念 2.大致思路 3.对照每行代码的详细注解 function [U, E_in] = KMeans(data, K) [N, .

TaloyerG的博客 4万+

从零开始学习CANoe(十六)—— Graphics

Graphics是一种以时间轴为横坐标,符号值为纵坐标的显示分析方法,相对于Trace来说,更直观的观察出信号的跳变

蚂蚁小兵 9194

9.6华为OD机试真题 新系统 - 少儿爬山闯关积分游戏 (Java/Py/C/C++/Js/Go)

2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型。

算法大师! 860

JavaEE初阶---properties类+反射+注解

1.配置文件properities 2.快速上手 3.常见方法 3.1读取配置文件 3.2获取k-v值 3.3修改k-v值 3.4unicode的说明 4.反射的引入 4.1传统写法 4.2反射的写法(初识) 4.3反射的介绍 4.4获得class类的方法 4.5所有类型的class对象 4.6类加载过程 4.7类初始化的过程 4.8类加载过程 4.9获取类的运行时结构 4.10动态创建对象 4.11获取成员属性方法 4.12性能测试 5.反射的应用 5.1操作泛型 5.2操作注解 6.注解annotati

大学成长道路上的探索经历与点滴思考,与君共勉,共筑成长。 1632

12、无人机系统的建模与仿真

本文深入探讨了无人机系统的建模与仿真技术,涵盖其发展需求、历史演变、动力学建模方法、常用参考框架与状态变量表示,并分析了在控制系统设计、操作员培训和子系统测试中的关键应用。文章还介绍了不同类型无人机(固定翼、旋翼、混合翼)在建模与仿真中的差异,提出了多学科融合、高精度实时仿真及VR/AR技术等未来发展趋势,并给出了实际建模与仿真的标准操作流程,为无人机系统的设计与优化提供了全面的技术支持与展望。

websocket5live的博客 197

Robot Framework 4.0.1 版本发布说明与关键修复深度解析

Robot Framework 4.0.1 是 4.0.x 系列的首个缺陷修复版本,于 2021 年 4 月 8 日发布,集中修复了 4.0 正式版发布后上报的若干严重问题,涵盖 Listener 中执行关键字导致 output.xml 损坏、套件 Teardown 中跳过测试引发的崩溃、多类型参数转换逻辑缺陷等。读完本文,你将掌握 4.0.1 的三项核心修复内容及其底层原理、一处向后不兼容的行为

gitblog_00372的博客 593

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

自定义注解获取类,属性变量,方法,方法参数上注解的值(Kotlin)

先看下效果 我们先来看一下kotlin中的注解Annotation.kt: package kotlin.annotation import kotlin.annotation.AnnotationTarget.* public enum class AnnotationTarget { /** 类、接口或对象 */ CLASS, /** 仅注释类 */ ANNOTATION_CLASS, /** 泛型类型参数(尚不支持)*/ TYPE_PARAMET

Sir的专栏 6834

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Tomcat原理(2)——注解及注解的实现

(1)注解一般用于对程序的说明,就像注释一样,但是区别是注释是给人看的,但是注解是给程序看的。(2)让编译器进行编译检查的作用,比如下边这个@Override注解是重写的意思,子类重写了父类的方法,但是改动了方法名,所以报错。①:@interface是用来声明一个注解的,格式public @interface 注解名{定义内容}②:其中的每一方法实际上是声明了一个配置参数③:方法的名称就是参数的名称④:返回值类型就是参数的类型(返回值类型只能是基本数据类型,Class,String,enum)

2301_78566776的博客 977

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

K:注解处理

@转载自:http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建并使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。 注解处理器类库(java.lang.reflect.An

MyStringIsNotNull的博客 309

【java进阶13: 注解】java内置的需要掌握的注解、元注解、反射注解、反射方法上的注解、注解在开发中的作用

只能出现在类上面,要求这个类中必须有一个int类型的id属性,如果没有这个属性就报异常,如果有这个属性则正常运行。如果一个注解的属性名是:value,并且该注解类型中只有这一个属性时在使用的时候,该属性名可以省略。注解中的属性为数组时,如果只写一个参数,则大括号可以省略,属性有枚举类型时怎么用。这个Target注解用来标注“被标注的注解”可以出现在哪些位置上。用来标注“注解类型”的“注解”,称为“元注解”这是一个元注解,用来标注“注解类型”的“注解”这是一个元注解,用来标注“注解类型”的“注解”

博客 563

java 注解的限制_类型注解与重复注解一些限制

类型注解原来注解只能用于声明,从JDK 8开始,注解还可以用于大多数使用类型的地方,这种注解称为类型注解。类型注解允许工具对代码执行额外的检查,从而帮助避免错误。javac本身一般不执行这些检查,这种工具需要作为编译器插件发挥作用。例子@Target(ElementType.TYPE_USE)public @interface TypeAnno {}@Target(ElementType.TYPE...

weixin_39869043的博客 1860

类型注解与重复注解一些限制

类型注解 原来注解只能用于声明,从JDK 8开始,注解还可以用于大多数使用类型的地方,这种注解称为类型注解。类型注解允许工具对代码执行额外的检查,从而帮助避免错误。javac本身一般不执行这些检查,这种工具需要作为编译器插件发挥作用。 例子 @Target(ElementType.TYPE_USE) public @interface TypeAnno { } @Ta...

weixin_30896825的博客 286

java怎么给注解写入值_深入理解Java:注解

点击上方☝SpringForAll社区轻松关注!源http://dwz.date/m3k注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程。Java提供了四种元注解,专门负责新注解的创建工作。元注解 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 ...

weixin_39633165的博客 669

使用Mybatis的@MapKey注解返回Map集合案例

1、Mybatis@MapKey注解的使用场景 在多值查询的时候,通常要把方法返回类型设置为Map<String,Object>类型,Mybatis为我们提供了另一种解决方式,通过K-V的形式将查询结果保存在Map中,这种实现方式只需要在方法上标注为@Mapkey即可。 2、代码 @Mapper public interface TbUserInfoMapper { ...

川子的博客 1万+

Java 基础——注解

本文记录了 Java 注解的相关知识。 本文章部分笔记整理来自https://www.bilibili.com/video/BV12k4y1q73J?p=333 1.注解概述 注解(Annotation),也称为元数据,它是一种代码级别的说明,是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、变量、参数等的前面,用来对它们进行说明。其作用大致可以分为以下三类: 编写文档 通过代码里

代码星辰的博客 781

【亲测免费】 ADE20K数据集简介

ADE20K数据集简介 【下载地址】ADE20K数据集简介 ADE20K数据集简介欢迎来到ADE20K数据集的存储库 项目地址: https://gitcode.com/open-source-toolkit/d45a3 ...

gitblog_09724的博客 1392

Annotation,注解

1、注解,或者叫做 注释,英语单词:annotation 2、注解annotation是一种引用数据类型。编译之后也是生成xxx.class文件 3、怎么自定义注解呢?语法格式? [修饰符列表] @interface 注解类姓名{ } 4、注解怎么使用,用在什么地方? - 第一,注解使用时的语法格式是: @注解类型名 - 第二,注解可以出现在类上、属性上、方法上、变量上等.... ...

qq_37203178的博客 2780

java注释和注解_注释注解JAVA注解

发一下牢骚和主题无关:package anno;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)public @interface MyAnnotation {String value();}package ann...

weixin_30166291的博客 934
上一篇: k:java中的内存泄露及其线程状态可视化
下一篇: K:注解语法简介
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值