@interface Java中的默认声明用法

时间:2009-02-25 21:48:44

标签: java annotations

我刚刚发现了这个功能。

使用“@interface”语法声明接口允许您设置默认值。

public @interface HelloWorld { 
     public String sayHello() default "hello world";
}

这对我来说是新鲜事。如何使用默认值。

我找不到对它的引用,因为在Java 1.5中添加“@”之前,www充满了java接口文档(是.5还是.4?)


修改

感谢您的回答(我在某种程度上接近“注释”,因为我已经使用了标签):P

我知道多年前我应该读过那份文件!!! ...让我们看看......

  

许多API需要大量的样板代码。对于....

2 个答案:

答案 0 :(得分:60)

您刚刚写了annotation

特别关于default语句:使用它是因为注释和接口不能有构造函数,因此这是获取注释属性的默认值的唯一方法。来自Java Language Specification

  

注释类型元素可以具有为其指定的默认值。这是通过使用关键字default的其(空)参数列表和元素的默认值来完成的。

     

默认值在读取注释时动态应用;默认值不会编译为注释。因此,即使在更改之前编译的类中,更改默认值也会影响注释(假设这些注释缺少默认元素的显式值)。

我注意到java.lang.annotation中没有注释使用默认值。


用法:您有一个带有@HelloWorld属性的注释sayHello。你可以把它放在这样的类上:

@HelloWorld(sayHello="Hi")
public class MyClass {
}

由于你有一个默认值,你可以放

@HelloWorld
public class MyClass {
}

(请注意,该文档说,“在带有单个元素的注释中,该元素应命名为value”;我相信这样做的唯一原因是您可以只编写@HelloWorld("Hi")必须命名参数。)

如上所述,您的注释可用于任何有效的程序元素(包括方法和变量声明)。您可以使用@Target注释更改此内容。

最后,通过设置RetentionPolicy,您可以决定是否应该由编译器放弃注释,由VM丢弃注释,还是始终保留注释。


两个可能也很有趣的软件包:javax.annotationjavax.annotation.processinghere是使用注释处理进行源代码分析的示例。

答案 1 :(得分:4)

这是annotation你声明不是界面。它是在Java 1.5中添加的。