目录
Document:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中。
@Inherited:如果父类所使用的注解被@Inherited修饰,则子类可以继承该注解
java注解
什么是java注解?
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
基本内置注解:
- @Override 被用于标注方法,用于说明所标注的方法是重写父类的方法
public class Father {
public void eat() {
System.out.println("Father eat...");
}
}class Son extends Father{
@Override
public void eat() {
System.out.println("Son eat...");
}
}
- @Deprecated 标记过时方法。如果使用该方法,会报编译警告。
- @SuppressWarnings 指示编译器去忽略注解中声明的警告。
自定义注解:
- 注解的属性也叫做成员变量。注解只有成员变量,没有方法。
- 注解中属性可以有默认值,默认值需要用 default 关键值指定
- 用定义方法的形式定义一个属性,方法的名字时属性的名字,方法的返回值就是属性的类型。
public @interface Annotation {
String[] value() default "王富贵";// 定义了一个属性
int age() default 20;
}
元注解:
元注解是Java语言中用于修饰自定义注解的注解,常用的元注解有:@Target
,@Retention
,@Documented
,@Inherited
和@Repeatable。
@Target
:用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元素有如下属性值:
ElementType.ANNOTATION_TYPE
:应用于其他注解的元注解;ElementType.CONSTRUCTOR
:应用于构造函数;ElementType.FIELD
:应用于全局属性;ElementType.LOCAL_VARIABLE
:应用于方法中的本地变量;ElementType.METHOD
:应用于方法;ElementType.PACKAGE
:应用于包;ElementType.PARAMETER
:应用于方法的参数;ElementType.TYPE
:应用于类、接口或者枚举声明。
@Target({ElementType.TYPE,ElementType.FIELD, ElementType.METHOD})
public @interface MyAnnotation {String[] value() default "王富贵";// 定义了一个属性
int age() default 20;
}
-
Retention:限制注解能持续多久
@Retention(RetentionPolicy.RUNTIME)
-
Document:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中。
import java.lang.annotation.*;
@Documented
public @interface Annotation {}
-
@Inherited:如果父类所使用的注解被
@Inherited
修饰,则子类可以继承该注解 -
@Repeatable:重复使用自定义注解
运用例子
定义一个自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Inherited
public @interface MyAnnotation {
String name() default "";
int age() default 20;
}
定义一个用户类并用上面的自定义注解修饰
@Data
@MyAnnotation(name = "王富贵",age = 20)
public class User {
private String name;
private int age;
}
测试
public class annotationTest {
public static void main(String[] args){
User user = new User();
setNameAge(user);
System.out.println("username is:"+ user.getName()+",user age is:"+user.getAge());
}
private static void setNameAge(User user){
Class userClass = user.getClass();
MyAnnotation annotation = (MyAnnotation) userClass.getAnnotation(MyAnnotation.class);
user.setAge(annotation.age());
user.setName(annotation.name());
}
总结
注解就像标签,是程序判断执行的依据。