【问题标题】:@interface default declaration usage in JavaJava 中的@interface 默认声明用法
【发布时间】:2010-10-09 22:31:33
【问题描述】:

我刚刚发现了这个功能。

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

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

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

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


编辑

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

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

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

【问题讨论】:

标签: java annotations


【解决方案1】:

你刚刚写了一封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.processing。而here就是一个使用注解处理进行源码分析的例子。

【讨论】:

  • +1:谢谢mmyers:你对这个懒惰的程序员有什么总结吗?
  • 总结什么?注释的所有用途?
  • 不,只有@interface 的用法...我会看链接...稍后:-/
  • 好的,执行摘要:注释对于源代码分析和代码生成非常有用(许多 Web 框架都这样做)。够好吗?
  • @mmyers:当然还有测试框架。好的,那么,我发布的是注释是如何声明的。然后要使用它,我只需注释我需要的类(它是否也适用于方法和接口)属性呢?然后,使用注释处理工具阅读它们。我说的对吗?
【解决方案2】:

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

【讨论】:

  • +1。哦..是的,注释。当我说“当我需要创建注释处理工具时,我会来做”时,我想我对那些人的演讲不屑一顾。今天我正在查看 Groovy 源代码,这是让我困惑的第一件事。
猜你喜欢
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2018-07-19
  • 2018-12-22
相关资源
最近更新 更多