注解的作用:
注解的格式:
@SuppressWarnings(values="unchecked")
注解的使用位置:
内置注解是默认存在于Java中的注解,不是由用户自己开发的注解。内置注解其实非常常见……
元注解的作用就是解释其他注解。Java定义了4个标准meta-annotation类型。这四个类型可以在java.lang.annotation包中找到。(@Target、@Retention、@Documented、@Inherited)。
@Target:描述注解的使用范围,即被描述的注解可以使用在哪些地方,声明被注解的注解的作用域
@Retention:表示需要在什么级别保存该注解信息,用于描述注解的生命周期。比如参数中传入一个Runtime,就表示被@Retention注解过的注解在运行时仍然是有效的。
@Documented:表示被该注解作用的注解要生成到JavaDoc中。
@Inherited:表示被该注解作用的注解B,子类可以继承父类中的注解B。
这些注解的作用、参数都可以点到源码之中查看。
元注解重点需要掌握@Target和@Retention。
使用 @Interface 可以自定义注解。它会自动继承java.lang.Annotation接口。
@Target(value = {ElementType.METHOD,ElementType.CONSTRUCTOR})
public @interface TestMetaAnnotation{
}
注解中,每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型(返回值只能是基本类型:String、enum等)。
可以通过default来声明参数的默认值。
如果只有一个参数成员,一般将该参数命名为”value“。
package main.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//我们的自定义注解当然可以传入值给参数
@TestMetaAnnotation(name = "xcy")
public class Test {
//我们的自定义注解参数当然也可以为空,因为有默认值
//如果没有默认值的话,就一定要给没有默认值的参数传入一个值了
@TestMetaAnnotation
public void test(){
}
}
/**
* @author xcy
* 自定义注解,作用域是方法和类,生命周期是运行时
*/
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface TestMetaAnnotation{
//注解的参数,并不是一个方法,默认值是空
String name() default "123";
int id() default -1;
}