zoukankan      html  css  js  c++  java
  • 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

    以上内容摘自百度百科。

  • 相关阅读:
    STL逆序迭代器(reverse_iterator)
    STL容器之vector容器API(二)
    STL容器之vector容器巧用swap收缩空间
    STL容器之vector容器API(一)
    STL容器vector概念和注意事项(每次扩充都会重新开辟空间,释放原空间,即首元素地址会变一次)
    STL容器之string内存重定义
    STL容器之string与c_style类型转换
    STL容器之string插入和删除
    STL容器之string字串
    STL容器之string比较
  • 原文地址:https://www.cnblogs.com/XZY30/p/10548082.html
Copyright © 2011-2022 走看看