Java - 给编译器看的Annotation
来源:互联网 发布:双十一套路 知乎 编辑:程序博客网 时间:2024/05/29 16:58
基础概念
- package com.itlwc;
- // 枚举类型指定范围
- enum RetentionPolicy {
- CLASS, // 只在编译之后class中起作用
- RUNTIME, // 在运行的时候起作用,因此可以反射性地读取
- SOURCE, // 只在源代码中起作用
- }
- // 枚举类型指定作用范围
- enum ElementType {
- ANNOTATION_TYPE, // 注释类型出现
- CONSTRUCTOR, // 构造方法出现
- FIELD, // 字段声明(包括枚举常量)出现
- LOCAL_VARIABLE, // 局部变量声明出现
- METHOD, // 方法声明出现
- PACKAGE, // 包声明出现
- PARAMETER, // 参数声明出现
- TYPE, // 类,接口(包括注释类型)或枚举声明出现
- }
- // 文档注释格式,如果出现则其注释将出现在doc文档中
- @interface Documented {
- }
- // 指示注释类型的注释要保留多久,如果不存在Retention注释,则默认为RetentionPolicy.CLASS
- @interface Retention {
- public RetentionPolicy value();
- }
- // 可以出现在那些元素之上,如果不存在Target注释,则声明的类型可以用任意元素之上
- @interface Target {
- public ElementType[] value();
- }
- @Documented
- @Retention(value = RetentionPolicy.SOURCE)
- @Target(value = { ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR })
- public class Test {
- public static void main(String[] args) {
- }
- }
系统内置Annotation
- @Override
- java.lang.Override,注解类型的
- 声明
- @Target(value=METHOD)
- @Retention(value=SOURCE)
- public @interface Override
- 用在方法之上,用来告诉编译器这个方法重写了父类的方法
- @Deprecated
- java.lang.Deprecated,注解类型的
- 声明
- @Documented
- @Retention(value=RUNTIME)
- public @interface Deprecated
- 用在方法之上,表示方法不建议使用(表示有危险或者有更好的代替)
- @SuppressWarnings
- java.lang.SuppressWarnings,注解类型的
- 声明
- @Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
- @Retention(value=SOURCE)
- public @interface SuppressWarnings
- 括号里面的是value等于一个数组,表示方法是
- @SuppressWarnings(value={"unchecked","unused"})
- 也可以写成下面这种
- @SuppressWarnings({"unchecked", "unused"})
- @Inherited
- java.lang.Inherited,注解类型的
- 声明
- @Documented
- @Retention(value=RUNTIME)
- @Target(value=ANNOTATION_TYPE)
- public @interface Inherited
- 表示一个Annotation能否被使用类的子类继承下去,如果没写,则无法继承
自定义Annotation
- package com.itlwc;
- enum Color {
- RED, GREEN, BLUE;
- }
- @interface Annotation {
- public String key();
- //使用默认值
- public String value() default "牛小俊";
- //使用枚举
- public Color color() default Color.RED;
- //使用数组
- public String[] url();
- }
- @Annotation(
- key = "lwc",
- value = "李文超",
- color = Color.GREEN,
- url = { "www.baidu.com", "www.guge.com" }
- )
- public class Test {
- }
通过反射取得方法上所有Annotation
- package com.itlwc;
- import java.lang.annotation.Annotation;
- import java.lang.reflect.Method;
- class Info {
- @Override
- @Deprecated
- @SuppressWarnings(value = "")
- public String toString() {
- return "hello";
- }
- }
- public class Test {
- public static void main(String[] args) throws Exception {
- Class<?> cls = Class.forName("com.itlwc.Info");
- Method methods = cls.getMethod("toString");
- Annotation[] annotations = methods.getAnnotations();
- for (Annotation a : annotations) {
- System.out.println(a);
- }
- }
- }
- /*
- 打印结果:
- @java.lang.Deprecated()
- 这个例子说明了Runtime中只能找到@Deprecated
- */
0 0
- Java - 给编译器看的Annotation
- Java - 给编译器看的Annotation
- 黑马程序员_给编译器看的注释annotation
- 泛型是给编译器看的,我可以通过反射使用。。。
- Notes:从Java编译器的角度看类加载过程
- 给自己看的。。。
- 给自己看的
- 给自己看的,
- JAVA的基础知识(给自己看的笔记)。
- 几段给 Java 初学者看的演示视频
- C++和JAVA的区别 -- 给初学者看
- C++和JAVA的区别 -- 给初学者看
- Java 最简单的文件输入输出(给自己看)
- Java的annotation
- Java的注解(Annotation)
- Java 内置的Annotation
- Java Annotation 的基础知识
- Java的Annotation标签
- 数据库 杂记
- CF_1A_TheatreSquare
- 我的c++第二次程序1
- Spring框架的IoC容器详解
- 问题 F: C语言习题 不等长字符串排序
- Java - 给编译器看的Annotation
- Numbers That Count
- C/C++中的函数指针
- Seek the Name, Seek the Fame (POJ_2752) KMP + 最大公共前后缀
- Java集合面试题
- 程序员必须知道的10大基础实用算法及其讲解
- 问题 G: C语言习题 输出月份
- POJ 3067 Japan (树状数组)
- 5. Longest Palindromic Substring | Java最短代码实现