注解(Annotation)
什么是注解
Annotation的作用:
-
不是程序本身,可以对程序做出解释,这一点和注释(comment)没什么区别。
-
可以被其他程序(比如编译器)读取
Annotation的格式:注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如@SuppressWarnings(value = "unchecked")
Annotatin在哪里使用:可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问
内置注解
@Override:只用于修饰方法,表示重写声明
@Deprecated:可以修饰方法、属性、类,表示废弃
@SuppressWarnings:用来抑制编译时的警告信息。与前两个注释有所不同,需要添加一个参数才能正确使用,这些参数都是已经定义好了的。比如:
- @SuppressWarnings("all")
- @SuppressWarnings("unchecked")
- @SuppressWarnings(value = {"unchecked","deprecation"})
元注解
元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。包括:
@Target:用来描述注解的使用范围
@Retention:表示需要在什么级别保存该注释信息,用于描述注解的声明周期(SOURCE < CLASS < RUNTIME)
@Inherited:说明子类可以继承父类中的该注解
@Documented:说明该注解将被包含在javadoc中
import java.lang.annotation.*;
@MyAnnotation
public class TestAnnotation {
public static void main(String[] args) {
}
}
//@Target 表示注解可以用在哪些地方,比如这里表示可以用在类上
@Target(value = ElementType.TYPE)
//@Retention 表示注解生命周期,这里表示直到运行时都有效
@Retention(value = RetentionPolicy.RUNTIME)
//@Inherited 表示可以被子类继承
@Inherited
//@Documented 表示会被写入javadoc中
@Documented
//自定义注解
@interface MyAnnotation{
}
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotatioon接口
-
@interface用来定义一个注解,格式:public @interface 注解名{定义内容}
-
其中的每一个方法实际上是声明了一个配置参数
-
方法的名称就是参数的名称
-
返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)
-
可以通过default来声明参数的默认值
-
如果只有一个参数成员,一般参数名为value
-
注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值
import java.lang.annotation.*;
public class TestAnnotation {
@MyAnnotation(age = 18)//age没有默认值,在使用注解时就需要显式赋值
@MyAnnotation2("val")//可以省略value
public void Test(){
}
}
@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
//自定义注解
@interface MyAnnotation{
//注意这不是方法,而是注解的参数
//注解参数:类型名 参数名()
String name() default "";
int age();
String[] schools() default {"清华","北大"};
}
@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
//如果只有一个参数,建议命令为value,这样赋值时可以省略value
String value();
}
标签:JAVA,value,参数,interface,注解,ElementType,Annotation
From: https://www.cnblogs.com/xiluoluo/p/16885149.html