注解

内置注解

注解 作用 描述
@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 中

自定义注解

  1. 属性可以是 8 中基本类型、String、Class、枚举、注解,或这些类型的一维数组
  2. 属性定义规则:类型 属性名() default 默认值,默认值可选
  3. 数组属性用大括号赋值,逗号隔开
  4. 如果不写属性名,默认赋值给 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()));
posted @   CyrusHuang  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示