java 注解

注解(Annotation)就像一个标签,用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。

JDK预置注解包括:
@Deprecated,即将废弃的标记;
@Override,表示当前的方法定义将覆盖超类中的方法;
@SuppressWarnings,阻止警告的意思
@SafeVarargs,参数安全类型注解
@FunctionalInterface,函数式接口注解
 
 

元注解

元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。
 
@Retention,注解的存活时间,取值如下:
  • RetentionPolicy.SOURCE,注解只在源码阶段保留,将被编译器丢弃;
  • RetentionPolicy.CLASS,注解保留到编译期间,将被VM丢弃;
  • RetentionPolicy.RUNTIME,注解保留到运行期间,因此可以通过反射机制读取注解的信息;
 
@Target,限定注解应用的场景,注解可以加在包、类,属性、方法,方法的参数以及局部变量上,取值如下:
  • ElementType.ANNOTATION_TYPE,可以给一个注解进行注解
  • ElementType.CONSTRUCTOR,可以给构造方法进行注解
  • ElementType.FIELD,可以给属性进行注解
  • ElementType.LOCAL_VARIABLE,可以给局部变量进行注解
  • ElementType.METHOD,可以给方法进行注解
  • ElementType.PACKAGE,可以给一个包进行注解
  • ElementType.PARAMETER,可以给一个方法内的参数进行注解
  • ElementType.TYPE,可以给一个类型进行注解,比如类、接口、枚举
 
@Repeatable,注解可以被多次应用
@Inherited,而是说如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
@Documented,将注解中的元素包含到Javadoc中;

获取注解信息

/**
     * 获取实体类上注解类的所有字段名
     *
     * @param type
     * @return java.util.List<java.lang.String>
     * @author CYH
     * @date 2020/5/27 0027 11:35
     **/
    public static <T> List<String> getEntityFieldList(Class<T> type) {
        try {
            List<String> list = new ArrayList<>();
            Field[] fields = type.getDeclaredFields();
            for (Field field : fields) {
                list.add(field.getAnnotation(FieldColumn.class).value());
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldColumn {
    public String value();
}

 

posted @ 2020-09-16 14:06  故木  阅读(115)  评论(0编辑  收藏  举报