java注解
java注解解读
java注解元注解
用于注解自定义注解的注解,包含一下几个
@Target 作用范围
@Retention 注解生命周期
@Inherited 遗传,能被继承
@Documented 文档,用javac编译时会有相应信息
@Repeatable 没有被@Repeatable修饰的注解在同一位置只能出现一次(jdk1.8新增)
@Target
注解使用的范围
ElementType.TYPE:能修饰类、接口或枚举类型
ElementType.FIELD:能修饰成员变量
ElementType.METHOD:能修饰方法
ElementType.PARAMETER:能修饰参数
ElementType.CONSTRUCTOR:能修饰构造器
ElementType.LOCAL_VARIABLE:能修饰局部变量
ElementType.ANNOTATION_TYPE:能修饰注解
ElementType.PACKAGE:能修饰包
@Retention
注解生命存活范围
RetentionPolicy.SOURCE: 注解只在源代码中存在,编译成class之后,就没了。@Override 就是这种注解。
RetentionPolicy.CLASS: 注解在java文件编程成.class文件后,依然存在,但是运行起来后就没了。@Retention的默认值,即当没有显式指定@Retention的时候,就会是这种类型。
RetentionPolicy.RUNTIME: 注解在运行起来之后依然存在,程序可以通过反射获取这些信息
@Inherited
当注解被@Inherited修饰表示此注解可以被继承。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
}
@MyAnnotation
public class A {
}
//B类也有@MyAnnotation注解
class B extends A {}
@Documented
当注解被@Documented注解修饰后,在用javac命令生成API文档后,文档里会出现该注解的说明
@Repeatable
使用 @Repeatable 注解的注解可以在同一位置使用
创建一个未被@Repeatable 注解的@MyAnnotation注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
String value() default "";
}
@MyAnnotation("A")
@MyAnnotation("B")
public class A {
}
在类上重复使用时报错
创建@MyAnnotations注解,值类型为MyAnnotation数组。@MyAnnotations注解的target范围要比@MyAnnotation中的范围大
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotations {
MyAnnotation[] value() default {};
}
在@MyAnnotation注解上添加@Repeatable(MyAnnotations.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Repeatable(MyAnnotations.class)
public @interface MyAnnotation {
String value() default "";
}
@MyAnnotation("A")
@MyAnnotation("B")
public class A {
}
A类上的报错消失
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通