我正在回顾 Java 注释是如何工作的,并意识到它是一个类的元数据。我对自定义注释有几个问题:
注释如何比静态或全局类变量更有用?
你能举一个注释有用的真实例子吗?
我正在回顾 Java 注释是如何工作的,并意识到它是一个类的元数据。我对自定义注释有几个问题:
注释如何比静态或全局类变量更有用?
你能举一个注释有用的真实例子吗?
1)我真的不认为“注释”、“静态变量”或“全局变量”之间有任何共性——它是苹果、橘子和金橘。
2)“注释”的一个很好的例子可能是 JAXWS Web 服务:
在这种情况下,JAXWS 感知工具可以识别“@WebService”类和“@WebMethod”方法,解析您的 Java 代码并从中自动生成适当的代理、存根、WSDL 等。
3)这是对“注释”的一个很好的介绍:
* http://www.developer.com/java/other/article.php/3556176/An-Introduction-to-Java-Annotations.htm
它 [基于注释的开发] 通过启用工具从源代码中的注释生成它,让我们避免在许多情况下编写样板代码。这导致了一种声明式编程风格,在这种风格中,程序员说应该做什么,而工具会发出代码来做这件事。”
注释本质上是元数据,即它们告诉一些关于类、方法或参数的信息,但不是它们注释的代码的一部分。类变量构成了代码本身的一部分,并服务于一个非常不同但同样重要的目的,即存储数据以供应用程序使用。
一个有用的例子是@Override
告诉编译器一个方法已经存在于超类中的注解。此注释提供编译时检查,以检查方法及其参数是否正确。
您可以使用注释来完成面向方面的编程 (AOP)。您应该尝试阅读有关方法拦截器的信息:尝试http://docs.jboss.org/aop/1.3/aspect-framework/examples/method-execution/methodexecution.html和http://code.google.com/p/google -guice/wiki/AOP。
您不能将全局变量绑定到类元素(构造函数、字段、方法等)并通过反射查询它们。这是一个区别。注释也有不同的保留等级:一旦被某些工具“处理”,它们就可以从字节码中删除,或者在运行时保留以供反射使用。
在注解之前,人们使用像 xdoclet 这样的工具来绑定来自 javadoc 注释的 java 源代码中的一些元信息;这些元信息被处理以生成周围的代码(即用于 EJB 中的持久性,或生成配置文件和其他源)。
注释如何比静态或全局类变量更有用?
来自http://en.wikipedia.org/wiki/Java_annotations#Processing:
编译 Java 源代码时,注释可以由称为注释处理器的编译器插件处理。处理器可以产生信息性消息或创建额外的 Java 源文件或资源,这些源文件或资源又可以被编译和处理,也可以修改带注释的代码本身。如果注解的 RetentionPolicy 为 CLASS 或 RUNTIME,Java 编译器有条件地将注解元数据存储在类文件中。稍后,JVM 或其他程序可以查找元数据以确定如何与程序元素交互或更改它们的行为。
How are annotations any more useful then a static or global class variable?
他们一开始并不邪恶。
在许多情况下,许多工具利用注释来帮助将您的对象映射到其他组件。ORM 将数据库中的每个字段映射到您的对象等?