文章目录
- 1. 系统内建的Annotation
- 2. 自定义Annotation
- 3. Retention
- 4. 反射 与 Annotation
- 5. Target
- 6. Documented
- 7. Inherited
将配置直接写入到程序之中:Annotation
1. 系统内建的Annotation
@Override
,@Deprecated
,@SuppressWarnings
等
class Person5 {
public String say(){
return "人在说话!";
}
}
class Student5 extends Person5{
@Override // 明确表示是覆写的函数,名称保持一致
public String say() {
return "学生在说话!";
}
@Deprecated // 不建议使用的操作,使用会出现警告
public String getInfo(){
return "hello";
}
}
class test7{
@SuppressWarnings("deprecated")//压制警告信息
public static void main(String[] args){
Student5 s = new Student5();
System.out.println(s.say());
System.out.println(s.getInfo());
}
}
2. 自定义Annotation
public @interface MyAnnotation名称 { }
//自定义Annotation
public @interface MyAnnotation{
public String key() default "Michael";
public String value() default "Ming";
public Color color() default Color.RED;//限定枚举的参数范围
public String[] url();
}
@MyAnnotation(color=Color.BLUE, key="Michael", value="Ming",
url={"https://michael.blog.csdn.net/","abc.xxx"})
class Info{
}
3. Retention
也是一个 Annotation,其取值是通过 RetentionPolicy (枚举)指定
4. 反射 与 Annotation
代码语言:javascript复制//自定义Annotation
@Retention(value=RetentionPolicy.RUNTIME) // 运行的时候可见
@interface MyAnnotation{
public String key() default "Michael";
public String value() default "Ming";
public EnumDemo.Color color() default EnumDemo.Color.RED;//限定枚举参数范围
public String[] url();
}
5. Target
也是一种 Annotation
代码语言:javascript复制@Target(value=ElementType.METHOD) // 只能在方法上使用
//@Target(value = {ElementType.METHOD, ElementType.TYPE}) // 多个选项
@Retention(value=RetentionPolicy.RUNTIME)
@interface MyAnnotation{
public String key() default "Michael";
public String value() default "Ming";
public EnumDemo.Color color() default EnumDemo.Color.RED;//限定参数范围
public String[] url();
}
6. Documented
也是一种 Annotation
代码语言:javascript复制@Documented
可以在使用类中加入文档注释,方便生成文档
代码语言:javascript复制/**
* 文档注释
*/
7. Inherited
也是一种 Annotation,写了@Inherited
的 Annotation 才能被子类继承
@Inherited