60

我刚刚发现了这个功能。

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

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

这对我来说是新事物。假设如何使用该默认值。

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


编辑

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

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

许多 API 需要大量的样板代码。为了....

4

2 回答 2

69

你刚刚写了一个注释

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

注释类型元素可能具有为其指定的默认值。这是通过在其(空)参数列表后面加上关键字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.processing。这里是一个使用注解处理进行源代码分析的例子

于 2009-02-25T21:51:45.307 回答
4

那是您声明的注释不是接口。它是在 Java 1.5 中添加的。

于 2009-02-25T21:53:01.577 回答