Java中的@interface默认声明用法

我刚刚发现了这个function。

使用“@interface”语法声明一个接口可以让你设置一个默认值。

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

这对我来说是新东西。 这个默认值是如何被使用的。

我无法find对此的引用,因为在Java 1.5中添加了“@”之前,www中充满了Java接口文档(在.5或.4中)


编辑

谢谢你的答案(我有点接近“注释”,因为我已经使用了标签):P

我知道我应该在几年前阅读这个文件!!!让我们看看…

许多API需要相当数量的样板代码。 对于….

你刚刚写了一个注释 。

关于default语句特别是:这是因为注释和接口不能有构造函数,所以这是注解属性具有默认值的唯一方法。 从Java语言规范 :

注释types元素可以具有为其指定的默认值。 这是通过跟随其(空)参数列表关键字默认值和元素的默认值。

默认是在读取注释时dynamic应用的; 默认值不会被编译到注释中。 因此,即使在更改之前编译的类(假定这些注释缺less默认元素的显式值),更改默认值也会影响注释。

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


用法:你有一个注解@HelloWorld ,其属性是sayHello 。 你可以把它放在这样的课堂上:

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

既然你有一个默认值,你可以放

 @HelloWorld public class MyClass { } 

(请注意,文档中说:“在使用单个元素的注释中,元素应该被命名为value ”;我相信唯一的原因是您可以只写@HelloWorld("Hi")而不必命名参数。)

正如所写,您的注释可以用于任何有效的程序元素(包括方法和variables声明)。 你可以用@Target注解来改变它。

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


两个可能也很有趣的包: javax.annotation和javax.annotation.processing 。 这里是使用注释处理进行源代码分析的一个例子。

这是一个注释,你声明不是一个接口。 它是在Java 1.5中添加的。