Java注解

2017-09-25  本文已影响0人  lazyguy
public @interface BaseDemo {

  String name();

  int age() default 18;

  String[] friends();

}

语法

  1. 创建一个注解,比起创建接口,关键字就变了一点点"@interface"表示创建一个注解。
  2. 所有注解自动实现了Annotation接口。不需要代码中写出,已经实现。
  3. 注解里面可以有很多的“成员变量”,与普通的类相比,语法稍有不同。写成:returnType variableName(); 或者 returnType variableName() default value;
  4. 其中returnType有所限制,只能是:
    4.1. 原始类型(byte,short,char,int,long,double,float,boolean)
    4.2. String字符串
    4.3. Enum枚举
    4.4. 注解类型
    4.5. Class类型,可以带上泛型,比如Class<? extends MyClass>
    4.6. 以上5种类型的数组类型,比如String[]
    简单记忆,基本上就是说: 你不能使用自己创建的各种普通类作为returnType,集合类型List什么的也不行。
  5. 没有给default 值的属性都必须在使用时给出值。
  6. 放在注解类上面的注解--元注解
    6.1 @Target 表明某个注解可以使用在哪儿。比如@Target(ElementType.TYPE)放在某个注解上表示这注解只能用在类,接口之类的上面。注意这是个数组,所以可以有多个值。比如SpringMVC的@RequestMapping那样:@Target({ElementType.METHOD, ElementType.TYPE}) 。如果一个注解没有@Target,表示此注解可以放在任何地方
    6.2 @Retention 表示这个注解会保留到啥时候。
    RetentionPolicy.SOURCE 表示注解的信息只会保留在源码文件中,既xxx.java文件中
    RetentionPolicy.CLASS 表示注解的信息会保留在字节码文件中,既xxx.class文件,加载入JVM的时候就丢失了。
    RetentionPolicy.RUNTIME 表示注解的信息会保留在字节码文件中,并且加载入JVM的时候也会被带入。
    6.3 @Document 如果一个注解上有@Document,那么此注解被使用的类的javadoc上也会显示出来注解的信息来。
    6.4 @Inherited 当一个注解是被用在类上ElementType.TYPE,如果有@Inherted,表示子类也可以继承父类的注解
上一篇下一篇

猜你喜欢

热点阅读