首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >官方文档中的Java注释示例

官方文档中的Java注释示例
EN

Stack Overflow用户
提问于 2015-08-28 22:49:17
回答 1查看 336关注 0票数 0

在阅读关于注释的Oracle文档(这个概念很新)时,我在开始时看到了下面的片段(底部的链接)。我不清楚这个例子说明了什么。公共@接口定义是普通接口定义的增强型吗?id()、engineer()等方法如果没有在接口实现中指定,则返回默认值?但是,实例化是令人困惑的,它是否提供了id()返回2868724等接口的实现?还不清楚函数travelThroughTime()的作用是什么。任何澄清均表示赞赏:

代码语言:javascript
复制
/**
* Describes the Request-For-Enhancement(RFE) that led
* to the presence of the annotated API element.
*/
 public @interface RequestForEnhancement {
   int    id();
   String synopsis();
   String engineer() default "[unassigned]"; 
   String date();    default "[unimplemented]"; 
 }

 @RequestForEnhancement(
   id       = 2868724,
   synopsis = "Enable time-travel",
   engineer = "Mr. Peabody",
   date     = "4/1/3007"
 )
 public static void travelThroughTime(Date destination) { ... }

http://docs.oracle.com/javase/1.5.0/docs/guide/language/annotations.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-28 23:15:49

要详细分析你的问题:

@interface,这是对 interface?:的增强,@interface声明的是与标准interface完全不同的东西--本质上是声明注释类型。通过进行此声明,可以将声明的内容用作其他代码中的注释。因此,宣言:

代码语言:javascript
复制
 public @interface RequestForEnhancement

使注释@RequestForEnhancement能够在以后的代码中使用。注释描述方法或类的元数据。例如,@RequestForEnhancement注释可能放在另一个类的方法前面,以指示某些开发人员希望以某种方式更改该方法。

相反,声明一个interface是声明一组函数的签名。随后实现接口的类必须提供这些函数的实现。

什么是“方法”,(**synopsis()**,,engineer()**,等)在注释主体for**中,这些方法实际上并不像您在类或接口定义中所看到的那样。相反,这些表示您刚刚声明的注释所包含的字段。方法上的@RequestForEnhancement注释应该指示所请求的方法更改是什么,并且可能需要谁来实现对方法的增强。因此,字段synopsisengineer是可以包含在注释中的字段。

这一节是什么意思?:

代码语言:javascript
复制
@RequestForEnhancement(
  id       = 2868724,
  synopsis = "Enable time-travel",
  engineer = "Mr. Peabody",
  date     = "4/1/3007"
)
public static void travelThroughTime(Date destination) { ... }

这是一个使用我们在以@RequestForEnhancement开头的块中声明的注释的示例。一旦定义了注释,在许多不同的类中,像这样的用法可能会在您的代码库中全部发生。在这个特殊的例子中,在某个类中有一个方法travelThroughTime(Date destination)显然不能很好地工作。一些开发人员发现了这种方法,认为应该通过让它做它声称要做的事情(穿越时间)来改进它。该开发人员决定通过在方法上添加一个@RequestForEnhancement注释来反映他的请求,并提供了一些关于何时发出请求的信息,以及预期由谁进行增强等信息。

当然可以,但是如何使用注释的内容进行任何有用的操作呢?(我要问你一个问题:- )

因此,假设我想要编写一个工具,它检查我所有的代码中带有@RequestForEnhancement注释的方法,并向请求中列出的工程师发送一封电子邮件,以及有关注释和增强请求的信息。我该怎么开始?

了解哪些方法有注释以及从注释中获取值的基本机制是通过Java反射。一个包含注释和反射示例的教程是这里 (它实际上是一个很好的注释教程)。

是如此确定,您可以使用反射从这些注释中获取信息,但是您什么时候会运行一个工具来使用注释中的信息呢?为您提供了定义注释处理器的能力,在编译代码时使用注释信息。这是看上去合理的教程。您还可以在运行时使用注释中的信息。例如,如果您曾经使用过JavaFX,您可能已经注意到注释会影响运行时行为(将@FXML添加到字段有助于JavaFX使用在fxml中定义的值填充该字段)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32280845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档