美文网首页
JDK5-注解

JDK5-注解

作者: Josaber | 来源:发表于2017-01-09 22:37 被阅读0次

注解是一个类,一个声明就是一个对象

简单注解

@SuppressWarnings("msg") - 压缩/抑制警告
@Deprecated - 声明过时
@Override - 声明复写

自定义注解

public @interface Anno {
}

注解的使用

@Anno
public class AnnoTest {
    public static void main(String[] args) {
        if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
            Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
            ...
        }
    }
}

但是在这里我们发现:无法获取到Anno的实例,是因为Anno注解在加载进内存时被去除了

注解的生命周期
源文件:RetentionPolicy.SOURCE(如SuppressWarnings及Override)
class文件:RetentionPolicy.CLASS(默认
内存字节码:RetentionPolicy.RUNTIME(如Deprecated)

重定义注解

@Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
}

元注解

元注解:对注解进行注解的注解(@Retention、@Target、@Documented和@Inherited)-> java.lang.annotation

@Retention:设置注解的可见性(生命周期)
@Target:设置注解的作用目标
@Documented:指示javadoc应该为注解生成文档
@Inherited:指示在子类继承父类时继承本注解

注解的作用范围

Target元注解:@Target(ElementType[])

如:
@Target({ElementType.TYPE, ElementType.METHOD})
@Target(ElementType.TYPE)  // 一个元素可以省略{}

ElementType

TYPE:所有元素(类、接口、枚举...)
PARAMETER:参数
PACKAGE:包
METHOD:方法
LOCAL_VARIABLE:局部变量
FIELD:属性
CONSTRUCTOR:构造器
ANNOTATION_TYPE:注解

为注解加属性(方法)

注解中属性的类型:八种基本类型、String、Class(ClassName.class)、enum以及上述类型的数组

@Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
    String color();
}

@Anno(color="red")
public class AnnoTest {
    public static void main(String[] args) {
        if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
            Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
            System.out.println(anno.color());
        }
    }
}

为注解属性添加默认值

若注解内只有一个属性且名为value或除value外其他属性均有默认值时,赋值时可以省略value,如下:

@Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
    String value();
}

@Retention(RetentionPolicy.RUNTIME)
public @interface Anno2 {
    String color() default "red";// 为属性设置默认值
    String value();
    int[] array() default {1, 2, 3};
    Anno annotation() default @Anno("Joshua");    // 注解中属性为注解
}

@Anno("Joshua")
@Anno2("Joshuaber")
public class AnnoTest {
    public static void main(String[] args) {
        if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
            Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
            System.out.println(anno.value());
        }
    }
}

Anno2也可也这样引用:@Anno2(color="blue", value="Joshua", array=1)

相关文章

  • JDK5-注解

    注解是一个类,一个声明就是一个对象 简单注解 @SuppressWarnings("msg") - 压缩/抑制警告...

  • JDK5-枚举

    使用普通类模拟枚举 使用抽象类模拟枚举 使用抽象类模拟可以免除toString()写大量的if-else语句,不需...

  • JDK5-增强for循环

    下面的程序演示了增强for循环在数组及集合中的应用: 注意: 增强for循环只能够遍历数组和实现了Iteratab...

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • 注解与反射

    注解 声明一个注解类型 元注解 在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • 注解的使用

    元注解 注解 注解本质就是接口: 元注解:修饰注解的注解 自定义注解 Text.java FruitName.ja...

  • 注解

    Java注解 注解 元注解 自定义注解 元注解:负责注解其他注解 共有4个标准的meta-annotation类型...

  • Spring高级应用之组合注解和元注解

    1.核心概念: 元注解:可以注解在其他注解上的注解;被注解的注解成为组合注解; 2.组合注解的定义步骤 定义组合注...

  • 2016.10.13-关于注解的自定义和注解的解析

    注解可以分为:1、标识性注解(没有成员变量) 2、注解 3、元注解(注解的注解) 1、注解的自定义 自定义注解的格...

网友评论

      本文标题:JDK5-注解

      本文链接:https://www.haomeiwen.com/subject/xmohbttx.html