Java零基础进阶篇之注解(二)
在编写 toString()方法时,因为输入错误或其他的疏忽,将之写成 ToString()了,编译这个类时并不会出现任何的错误,编译器不会知道您是想重写 toString()方法,只会以为是定义了一个新的 ToString()方法.可以使用 java.lang.Override 这个Annotation 类型,在方法上加一个@Override 的 Annotation 这可以告诉编译器现在定义的这个方法,必须是重写父类中的方法.
java.lang.Override 是一个 Marker Annotation,简单地说就是用于标示的 Annotation,Annotation 名称本身表示了要给工具程序的信息。Annotation 类型与 Annotation 实际上是有区分的,Annotation 是Annotation 类型的实例,例如@Override是个 Annotation,它是 java.lang.Override 类型的一个实例,一个文件中可以有很多个@Override,但它们都是属于java.lang.Override 类型。
2.标识方法为过时的@Deprecated
java.lang.Deprecated 也是J2SE5.0 中标准的Annotation 类型之一。它对编译器说明某个方法已经不建议使用。如果有开发人员试图使用或重写被@Deprecated 标示的方法,编译器必须提出警告信息。
如果有人试图在继承这个类后重写 getSomething()方法,或是在程序中调用 getSomething()方法,则编译时会有警告出现。
java.lang.Deprecated 也是一个Marker Annotation 简单地说就是用于标示。
3. 抑制编译器警告 @SuppressWarnings
java.lang.SuppressWarnings 也是J2SE5.0 中标准的Annotation 类型之一,它对编译器说明某个方法中若有警告信息,则加以抑制,不用在编译完成后出现警告。例如:
这样,编译器将忽略 unchecked 的警告,您也可以指定忽略多个警告:
@SuppressWarnings(value={'unchecked','deprecation'});
@SuppressWarnings 是所谓的Single-Value Annotation,因为这样的Annotation 只有一个成员,称为value 成员,可在使用 Annotation 时作额外的信息指定。
4.自定义 Annotation 类型
可以自定义 Annotation 类型,并使用这些自定义的 Annotation 类型在程序代码中使用 Annotation,这些 Annotation将提供信息给程序代码分析工具。首先来看看如何定义 Marker Annotation,也就是Annotation 名称本身即提供信息。对于程序分析工具来说,主要是检查是否有 Marker Annotation 的出现,并做出对应的动作。要定义一个 Annotation 所需的动作, 就类似于定义一个接口,只不过使用的是@interface。
由于是一个 Marker Annotation,所以没有任何成员在 Annotation 定义中。编译完成后,就可以在程序代码中使用这个Annotation。
稍后可以看到如何在Java 程序中取得 Annotation 信息(因为要使用Java 程序取得信息,所以还要设置 meta-annotation,稍后会谈到),接着来看看如何定义一个 Single-Value Annotation,它只有一个Value 成员。
实际上定义了value()方法,编译器在编译时会自动产生一个 value 的域成员,接着在使用UnitTest Annotation 时要指定值。
如:
@UnitTest('zhangsan')实际上是@UnitTest(value='zhangsan')的简便写法,value 也可以是数组值。如:
在使用时,可 以 写 成 @FunctionTest({'method1','method2'}) 这 样 的 简 便 形 式 。 或 是@FunctionTest(value={'method1','method2'})这样的详细形式.也可以对value 成员设置默认值,使用default关键词即可。
这样如果使用@UnitTest2 时没有指定value 值,则value 默认就是 NoSuchMethod.也可以为Annotation 定义额外的成员,以提供额外的信息给分析工具,如:
运用: