Annotation

    J2SE 5.0提供对元数据的支持,这种元数据称为注释(Annotation)。通过使用注释,程序员可以在不改变原有逻辑的情况下,在源文件潜入一些补充信息。

1、Annotation:用来修饰类、属性、方法,而且不影响程序运行。java.lang.annotation.AnnotationAnnotation的接口,只要是Annotation都必须实现此接口。

   Annotation有:系统内建的Annotation和用户自定义的Annotation

2、系统内建的Annotation(都在java.lang包中定义):

             @Override:覆写的Annotation

             @Deprecated:不赞成使用的Annotation

             @SuppressWarnings:压制安全警告的Annotation

1)、@Override:只在方法覆写时使用,用于保证方法覆写的正确性。

2)、@Deprecated:用于声明一个不建议使用的方法或类,如果在程序中使用了此方法和类,则在编程时将会出现警告信息但是程序依然会正常执行。

3)、@SuppressWarnings:用于压制警告。当需要压制多个警告信息时,可以按照数组的格式进行操作。在设置注释信息时,是以“key->value”形式出现也可使使用“value={“关键字1”,“关键字2}”的方式设置。

3、 自定义Annotation

   (1)、定义格式:[public] @interface Annotation 名称{

                        数据类型 变量名称()

                   }

             在定义Annotation必须使用@interface的方式进行定义,可以定义各种变量,但变量定义之后必须有“()”。

   (2)、向变量中设置内容

          指定一个属性时:直接设置内容,也可以通过指定接受的属性名

          指定多个属性时:指定属性名方式

          一个属性设置多个内容:将一个属性定义成数组

直接设置内容

指定属性名方式

一个属性设置多个内容

public @interface MyDefaultAnnotationSingleParam

{

    public String key();

}

 

@MyDefaultAnnotationSingleParam("李星华");

class Demo

{

}

public @interface MyDefaultAnnotationMoreParam

{

    public String key();

public String value();

}

 

@MyDefaultAnnotationMoreParam(key="MLDN",value="李星华");

class Demo

{

}

public @interface MyDefaultAnnotationArrayParam

{

public String[] value();

}

@MyDefaultAnnotationArrayParam(value={"MLDN","李星华"})

class Demo

{

}

   (3)、默认值:只要定义Annotation时设置了属性,必须使用时设置内容否则在编译时会出现错误。为了方便可以指定默认值。

         格式:[public]  @interface Annotation 名称{

                   数据类型 变量名() default 默认值;

                   }

   (4)、使用枚举限制设置内容

定义枚举

 

 

public enum MyName{

MLDN,LXH,LI;

}

 

public @interface MyDefaultAnnotationEnum

{

public MyName name()default Myname.LXH;

}

@MyDefaultAnnotationEnum(name=MyName.Li)

class Demo

{

}

 

4、Retention定义Annotation的保存范围。

   RetentionPolicyRetention中存在的一个变量。

RetentionPolicy包含的三个范围

 

SOURCE

Override采用)

信息只会保存在程序源文件中(*.java,编译之后不会保存在编译好的文件中(*.class

CLASS

Deprecated采用)

信息保存在程序源文件中(*.java)和编译之后的类文件中(*.class)。使用时不会加载到虚拟机(JVM)中(没有指定范围时默认为此)

RUNTIME

SuppressWarnings采用)

信息保留在源文件(*.java)、类文件(*.class)、执行时加载到JVM

若要一个Annotation起作用必须结合Java中的反射机制。

5、Annotation的应用

如果一个Annotation没有明确指明定义的位置,则可以在任意位置使用。

(1)如果想一个Annotation只能在指定位置使用,则必须使用@Target注释。

           @Target可以接收一个ElementType数组,则其可以同时设置多个Annotation的出现位置。

(2)@Documented注释可以用在任何一个Annotation上。

            使用@Documented注释后,此Annotation在生成java doc时就可以加入类或方法的一些说明信息。

(3)@Inherited用于标注一个父类的注释是否可以被子类所继承,如果一个Annotation需要被其子类所继承,则在声明时直接使用@Inherited注释即可。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值