内置注解
注解 | 作用 | 描述 |
---|---|---|
@Override | 用于标记方法覆盖父类的方法 | |
@Deprecated | 标记已过时的方法或类,建议不再使用 | |
@SafeVarargs | 用于抑制参数安全性警告 | 注解只能用于静态方法或 final 实例方法 |
@FunctionalInterface | 标记接口为函数式接口 | 只有一个抽象方法的接口 |
@SuppressWarnings | 抑制编译器警告 | all,抑制所有警告 boxing,抑制与封装/拆装作业相关的警告 cast,抑制与强制转型作业相关的警告 dep-ann,抑制与淘汰注释相关的警告 deprecation,抑制与淘汰的相关警告 fallthrough,抑制与switch陈述式中遗漏break相关的警告 finally,抑制与未传回finally区块相关的警告 hiding,抑制与隐藏变数的区域变数相关的警告 incomplete-switch,抑制与switch陈述式(enum case)中遗漏项目相关的警告 javadoc,抑制与javadoc相关的警告 nls,抑制与非nls字串文字相关的警告 null,抑制与空值分析相关的警告 rawtypes,抑制与使用raw类型相关的警告 resource,抑制与使用Closeable类型的资源相关的警告 restriction,抑制与使用不建议或禁止参照相关的警告 serial,抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告 static-access,抑制与静态存取不正确相关的警告 static-method,抑制与可能宣告为static的方法相关的警告 super,抑制与置换方法相关但不含super呼叫的警告 synthetic-access,抑制与内部类别的存取未最佳化相关的警告 sync-override,抑制因为置换同步方法而遗漏同步化的警告 unchecked,抑制与未检查的作业相关的警告 unqualified-field-access,抑制与栏位存取不合格相关的警告 unused,抑制与未用的程式码及停用的程式码相关的警告 |
@Target | 指定注解可以应用的程序元素类型 | ElementType.TYPE, 类、接口、枚举类 ElementType.FIELD, 成员变量(包括:枚举常量) ElementType.METHOD, 成员方法 ElementType.PARAMETER, 方法参数 ElementType.CONSTRUCTOR, 构造方法 ElementType.LOCAL_VARIABLE, 局部变量 ElementType.ANNOTATION_TYPE, 注解类 ElementType.PACKAGE, 可用于修饰:包 ElementType.TYPE_PARAMETER, 类型参数,JDK 1.8 新增 ElementType.TYPE_USE 使用类型的任何地方,JDK 1.8 新增 |
@Retention | 指定注解的保留策略,即在何时有效 | RetentionPolicy.SOURCE, 源文件保留(java 文件) RetentionPolicy.CLASS, 编译期保留,默认值(class 文件) RetentionPolicy.RUNTIME 运行期保留(运行时也存在) |
@Inherited | 指定注解是否可以被子类继承 | |
@Documented | 指定注解将被包含在 Javadoc 中 |
自定义注解
- 属性可以是 8 中基本类型、String、Class、枚举、注解,或这些类型的一维数组
- 属性定义规则:
类型 属性名() default 默认值
,默认值可选 - 数组属性用大括号赋值,逗号隔开
- 如果不写属性名,默认赋值给 value,前提是注解有 value 这个属性
@Target(value = {ElementType.METHOD})// 只能标注在方法上
@Retention(RetentionPolicy.RUNTIME)// 运行时有效
@Documented
@Inherited
@interface MyAnnotation {
String name() default "";
int age() default 0;
String[] schools(); // String 类型数组
}
// 使用注解
public class Student{
@MyAnnotation(age=18, schools={"小学","中学","大学"})
public void testAnno(){}
}
注解解析
Class<Student> clazz = Student.class;
// 是否有 MyAnnotation 注解,存在则返回 true,否则返回 false,@Retention 不能是 RetentionPolicy.RUNTIME
clazz.isAnnotationPresent(MyAnnotation.class);
// 获取 MyAnnotation 注解(继承来的也能获取)
MyAnnotation annotation1 = clazz.getAnnotation(MyAnnotation.class);
// 获取 MyAnnotation 注解(不能获取继承来的)
MyAnnotation annotation2 = clazz.getDeclaredAnnotation(MyAnnotation.class);
// 获取所有注解
List<MyAnnotation> annotationList = clazz.getAnnotations();
// 打印注解各项值
System.out.println("name:" + annotation.name());
System.out.println("age:" + annotation.age());
System.out.println("schools:" + String.join(", ", annotation.schools()));
标签:java,抑制,相关,注解,警告,ElementType,MyAnnotation
From: https://www.cnblogs.com/cyrushuang/p/18322816