Java Annotation VS静态或全局变量

时间:2012-12-24 00:04:49

标签: java android annotations

我正在审查Java Annotations如何工作并意识到它是一个类的元数据。我有一些关于自定义注释的问题:

  1. 注释如何比静态或全局类变量更有用?

  2. 你能给出一个注释有用的真实例子吗?

7 个答案:

答案 0 :(得分:2)

1)我真的不认为“注释”,“静态变量”或“全局变量”之间存在任何共性 - 它是苹果,橘子和金橘。

2)“注释”的一个很好的例子可能是JAXWS Web服务:

3)以下是对“注释”的一个很好的介绍:

  

*   http://www.developer.com/java/other/article.php/3556176/An-Introduction-to-Java-Annotations.htm

     

它[基于注释的开发]让我们避免编写样板文件   在许多情况下通过启用工具从中生成代码   源代码中的注释。这导致声明   编程风格,程序员说应该做什么和   工具会发出代码来执行此操作。“

答案 1 :(得分:1)

Annotations 本质上是元数据,即它们讲述了类,方法或参数,但不是它们注释的代码的一部分。类变量构成了代码本身的一部分,并且提供了一种非常不同但同样重要的目的,即存储数据以便在应用程序中使用。

一个有用的例子是@Override注释,它告诉编译器一个方法已存在于超类中。此批注提供了编译时检查,以检查方法及其参数是否正确。

答案 2 :(得分:1)

您可以使用注释来完成面向方面编程(AOP)。您应该尝试阅读方法拦截器:尝试http://docs.jboss.org/aop/1.3/aspect-framework/examples/method-execution/methodexecution.htmlhttp://code.google.com/p/google-guice/wiki/AOP

答案 3 :(得分:1)

您不能将全局变量绑定到类元素(构造函数,字段,方法等)并使用反射查询这些元素。 这是一个区别。 此外,注释具有不同的保留等级:一旦被某些工具“处理”,它们就可以从字节码中删除,或者在运行时保留,以便反射。

在注释之前,人们正在使用像xdoclet这样的工具来绑定来自javadoc注释的java源代码中的一些元信息;处理这些元信息以生成周围代码(即,用于EJB中的持久性,或生成配置文件和其他源)。

答案 4 :(得分:0)

  

注释如何比静态或全局类更有用   变量?

来自http://en.wikipedia.org/wiki/Java_annotations#Processing

  

编译Java源代码时,可以处理注释   编译器插件称为注释处理器。处理器可以生产   信息性消息或创建其他Java源文件或   资源,而这些资源又可以被编译和处理   修改带注释的代码本身。 Java编译器有条件地   如果注释具有a,则将注释元数据存储在类文件中   CLASS或RUNTIME的RetentionPolicy。后来,JVM或其他程序   可以查找元数据以确定如何与之交互   程序元素或改变他们的行为。

答案 5 :(得分:0)

How are annotations any more useful then a static or global class variable?

他们首先不是邪恶的。

答案 6 :(得分:0)

在许多情况下,许多工具利用注释来帮助将对象映射到其他组件。 ORM将DB中的每个字段映射到您的对象等?