@interface Java 中的缺省声明用法

2022-08-31 16:27:49

我刚刚发现了这个功能。

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

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

这对我来说是新的东西。假设如何使用该默认值。

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


编辑

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

我知道我应该在几年前读过那份文件!!!...我看看。。。

许多 API 需要相当数量的样板代码。为。。。。


答案 1

您刚刚编写了注释

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

注释类型元素可能具有为其指定的缺省值。这是通过在其(空)参数列表后面加上关键字和元素的默认值来完成的。default

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

不过,我注意到java.lang.annotation中没有一个注释使用默认值。


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

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

由于您有默认值,因此只需将

@HelloWorld
public class MyClass {
}

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

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

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


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


答案 2

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


推荐