Annotation

Annotation,是Java5的新特性,JDK5引入了元数据(元数据)很容易的就能够调用Annotations.Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。注释对代码的执行没有什么影响。注释使用@annotation的形式应用于代码:类(类),属性(属性),方法(方法)等等。一个注释出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。

Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。An annotation 对代码的执行没有什么影响。Annotations使用@annotation的形式应用于代码:类(class),属性(field),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。

定义自己的Annotation是一个比较高级的技巧,这里我们不做讨论,这里我们仅仅讨论每一个Java 编程者都应该知道的内置的annotations:@Deprecated,@Override,and @SuppressWarnings。下面的程序阐述了这三种annotation如何应用于methods。import java.util.List;

class Food {}

class Hay extends Food {}

class Animal {

Food getPreferredFood() {

return null;

} /** * @deprecated document why the method was deprecated */

@Deprecated

static void deprecatedMethod() { }

}

class Horse extends Animal {

Horse() {

return;

}

@Override

Hay getPreferredFood() {

return new Hay();

}

@SuppressWarnings("deprecation")

void useDeprecatedMethod() {

Animal.deprecateMethod(); //deprecation warning - suppressed }}

}

}

@Deprecated @Deprecated annotation标注一个method不再被使用。编译器在一个program(程序?)使用了不赞成的方法,类,变量的时候会产生警告(warning)。如果一个元素(element:method,class,or variable)不赞成被使用,应该像前面的例子里使用相应的@deprecated 标签,并且注意标签的首字母是小写的"d",而annotation是大写的"D"。一般情况下,我们应该避免使用不赞成使用的方法(deprecated methods),而应该考虑替代的方法。

@Override annotation 告诉编译器当前元素是重写(override)自父类的一个元素。在前面的例子中,override annotation用来说明Horse类中的getPreferredFood这个方法重写(override)自Animal类中相同的方法。如果一个方法被标注了@Override,但是其父类中没有这个方法时,编译器将会报错。但是并不是说我们一定要使用这个annotation,但是它能够很明显的给出实际行为,尤其是在方法返回一个被重写的方法返回类型的子类型的时候。上面的例子中,Animal.getPreferredFood 返回一个 Food实例,Horse.getPreferredFood 返回一个Hay实例,这里Horse是Animal的子类,Hay是Food的子类。

@SuppressWarnings annotation 告诉编译器禁止别的元素产生的特殊的警告(warnings),在前面的例子里,useDeprecatedMethod调用了Animal的不赞成使用的一个方法。一般情况下,编译器会给出一个警告(warning),但是在这种情况下,不会产生这个警告,也就是说被suppress。每个编译器的警告都属于一个类型。Java Language Specification列出了两种类型:"deprecation" 和 "unchecked"。"unchecked" 警告发生在使用非generic的旧代码交互的generic collection类时。要禁止不止一种的警告时,则使用下面的语法:@SuppressWarnings({"unchecked","deprecation"})

方法摘要

Class<? extends Annotation> annotationType()

返回此 annotation 的注释类型。

boolean equals(Object obj)

如果指定的对象表示在逻辑上等效于此接口的注释,则返回true。

int hashCode()

返回此 annotation 的哈希代码,具体说明如下:具体说明如下:成员值的哈希代码取决于其类型:

String toString()

返回此 annotation 的字符串表示形式。

方法信息

equals

boolean equals(Object obj)如果指定的对象表示在逻辑上等效于此接口的注释,则返回 true。换句话说,如果指定对象是一个与此实例相同的 annotation 类型的实例,即其所有成员都与此实例中所对应的成员相等,则返回 true,具体说明如下:

如果 x == y,则认为值分别为 x 和 y 的两个对应的基本类型成员相等,除非它们的类型是 float 或 double。

如果 Float.valueOf(x).equals(Float.valueOf(y)) 为真,则认为值分别为 x 和 y 的两个对应的 float 成员相等。(与 == 运算符不同,NaN 被认为等于其自身,并且 0.0f 不等于 -0.0f。)

如果 Double.valueOf(x).equals(Double.valueOf(y)) 为真,则认为值分别为 x 和 y 的两个对应的 double 成员相等。(与 == 运算符不同,NaN 被认为等于其自身,并且 0.0 不等于 -0.0。)

如果 x.equals(y) 为真,则认为值分别为 x 和 y 的两个对应的 String、Class、enum 或 annotation 类型的成员相等。(注意,此定义对于 annotation 类型的成员是递归的。)

对于适当重载的 Arrays.equals(long[],long[]),如果 Arrays.equals(x,y) 为真,则认为两个对应的数组类型的成员 x 和 y 相等。

覆盖编辑

类 Object 中的 equals

参数:

obj - 要与之比较的引用对象。

返回:

如果指定的对象表示在逻辑上等效于该接口的 annotation,则返回 true,否则返回 false

 

以上内容摘自百度百科。

posted @ 2019-03-17 18:11  XZY30  阅读(125)  评论(0编辑  收藏  举报