基本注解:
@Override:覆盖超类方法
@Deprecated:一般作为过时方法标记
@SuppressWarnings:关闭不当的编译器警告
@SuppressWarnings(value={"deprecation"})可指定的值
deprecation -- 使用了不赞成使用的类或方法时的警告
unchecked -- 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
fallthrough -- 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
path -- 在类路径、源文件路径等中有不存在的路径时的警告。
serial -- 当在可序列化的类上缺少 serialVersionUID 定义时的警告。
finally -- 任何 finally 子句不能正常完成时的警告。
all -- 关于以上所有情况的警告。
元注解:
@Target:注解用于什么地方,ElementType可声明
TYPE:类、接口(包括注释类型)或枚举声明
FIELD:字段声明(包括枚举常量)
METHOD:方法声明
PARAMETER:参数声明
CONSTRUCTOR:构造方法声明
LOCAL_VARIABLE:局部变量声明
ANNOTATION_TYPE:注释类型声明
PACKAGE :包声明
@Retention:表示需要在什么级别保持注解信息,RetentionPolicy可声明
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行期也保留注解,可通过反射读取注解信息
@Documented:标记这些注解是否包含在用户文档中
@Inherited:标记这个注解是继承于哪个注解类
Java7新增:
@SafeVarargs:忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告
Java8新增:
@FunctionalInterface:标识一个匿名函数或函数式接口
@Repeatable:标识某注解可以在同一个声明上使用多次
//定义一个注解示例
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase{
public int id();
public String description()default "no description";
}
//注解使用示例
public class PassWordUtils{
@UseCase(id = 47,description = "you description message"
public boolean method(){
...
}
}
注解处理器:
//定义一个UseCase注解的处理器并调用
public void trackUseCase(Class<?> cl){
//通过反射查找@UseCase标记
for(Method m:cl.getDeclaredMethods()){
//getAnnotation获取指定类型注解对象
UseCase uc = m.getAnnotation(UseCase.class);
if(uc !=null){
"Found Use Case "+uc.id+uc.description();
}
}
}
trackUseCase(PassWordUtils.class)
注解元素:
1,所有基本类型(int,float,boolean等)
2,String
3,Class
4,enum
5,Annotation
6,以上类型的数组
默认值限制
元素不能有不确定的值,即必须有默认值,要么在使用注解时提供元素的值。对于非基本类型的元素不能以null作为值。如需表示null可以自己定义-1或者""作为替代
网友评论