一、哪里可以使用注解
可以使用在类、域变量(对象属性变量)、方法、其他程序元素的申明,按照惯例写在申明行的上面,如:
@Override
void mySuperMethod() { ... }
@Author(name = "Jane Doe")
@Author(name = "John Smith")
class MyClass { ... }
二、申明一个注解类型(可以理解为注入类体的一种元数据)
语法如下:
@interface ClassPreamble {
String author();
String date();
int currentRevision() default 1;
String lastModified() default "N/A";
String[] reviewers();
}
定义之后,可以这样使用:
@ClassPreamble (
author = "John Doe",
date = "3/17/2002",
currentRevision = 6,
lastModified = "4/12/2004",
reviewers = {"Alice", "Bob", "Cindy"}
)
public class Generation3List extends Generation2List {...}
三、预定义注解(API提供的注解)
java.lang包中(系Java编译): @Deprecated, @Override, and @SuppressWarnings;
@SafeVarargs:抑制不定长参数的安全性检测告警
@FunctionalInterface:函数式接口
java.lang.annotation包中(元注解-定义注解使用):
@Retention 将标记的注解存在哪
RetentionPolicy.SOURCE – The marked annotation is retained only in the source level and is ignored by the compiler.
RetentionPolicy.CLASS – The marked annotation is retained by the compiler at compile time, but is ignored by the Java Virtual Machine (JVM).
RetentionPolicy.RUNTIME – The marked annotation is retained by the JVM so it can be used by the runtime environment.
热门评论
main方法中测试:
Administrator adr = new Administrator();
Method mm = adr.getClass().getMethod("impelementTodo") ;
System.out.println(mm.getAnnotation(Todo.class).author());
下面来写一个例子:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Todo {
public enum Priority {LOW, MEDIUM, HIGH}
public enum Status {STARTED, NOT_STARTED}
String author() default "Yash";
Priority priority() default Priority.LOW;
Status status() default Status.NOT_STARTED;
}
在类中使用
/**
* 自定义注解
*/
@Todo
public void impelementTodo( )
{
}