六、注解

基本注解:

@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或者""作为替代

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容