我知道注释有助于修改代码而无需实际使用代码,例如:
@Author(
name = "Benjamin Franklin",
date = "3/27/2003"
)
但我不明白使用注释比仅仅说名字=“本杰明富兰克林”更好/更清晰/更简洁?添加注释如何加强代码?
编辑:很抱歉有另一个问题,但我知道@Override在调用方法或类时可以帮助预防/跟踪拼写错误,但是它是如何做到的?它对实际程序有帮助吗?
答案 0 :(得分:3)
注释只是元数据。他们自己很少或没有目的。必须有一个注释处理器,在编译器或运行时级别使用它们。
使用类似
的注释@Author(
name = "Benjamin Franklin",
date = "3/27/2003"
)
例如,某些注释处理器可能会在运行时使用反射读取它,并创建一个日志文件,该作者在该日期编写了所有注释文件。
答案 1 :(得分:1)
注释是元数据。
@Override
注释用于确保您覆盖超类的方法,而不仅仅是创建具有相同名称的方法。这里常见的错误包括:
equal(Object o)
代替equals(Object o)
添加不同的参数集
MyString extends String {public boolean equals(MyString str){}}
equals(MyString str)
未覆盖方法equals(Object o)
因此不会被标准Java比较器使用(在某些标准函数中使用,例如List.contains()
,这很容易出错情况)。
这个注释有助于编译器确保您正确编码所有内容,并以这种方式帮助编程。
@Deprecated
注释不会使程序无法编译,但它使开发人员考虑使用可以和/或将在未来版本中删除的代码。所以他们(开发人员)会考虑转移到另一个(更新的)函数集。如果使用标志-Xlint
编译程序,编译过程将返回错误,除非您删除已弃用代码的所有用法或使用注释@SuppressWarnings("deprecation")
明确标记它们。
@SuppressWarnings
用于抑制警告(是的,我知道它是队长明显的风格:))。使用@SuppressWarnings("deprecation")
进行了弃用抑制,使用@SuppressWarnings("unchecked")
进行了不安全的类型转换以及其他一些。当项目编译器具有编译标志-Xlint
并且您不能(或不想)更改它时,这很有用。
还有一些注释处理器可以集成到程序构建过程中,以确保程序代码符合某种标准。例如,使用IntelliJ Idea IDE注释处理器,您可以使用@Nullable
和@NotNull
注释。它们在使用您的代码时向其他程序员展示,以便可以将null作为特定参数传递给方法。如果它们传输null,它将在编译期间或在执行单行方法的代码之前导致异常。
因此,如果您充分发挥它们的潜力,那么注释会非常有用。
答案 2 :(得分:0)
其他程序最有可能使用注释。例子包括:
@覆盖 IDE(编译器?)确保签名匹配
@Deprecated IDE标记出现,编译器警告
@FXML 当.fxml文件膨胀时,JavaFX可以使用这些注释初始化控制器类中的变量(请参阅http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm)。它们也被JavaFX Scene Builder使用。
答案 3 :(得分:0)
注释用作标记代码的方法。有几个框架使用它,而另一些框架则很好地利用它来创建自己的框架。
此外,重要的是要理解注释等同于元数据,但远不止于此,因为它可以作为代码的标记语言。
答案 4 :(得分:0)
@Annotation
(来自Java 5
)添加元数据
RetentionPolicy定义生命周期
RetentionPolicy.SOURCE
:仅在编译时间(@Override
,@SuppressWarnings
,@StringDef
)中可见。例如,apt
可以使用它来生成一些代码RetentionPolicy.CLASS
:在编译和部署时间(.class
)中可见。例如,ASM
或Java AOP范例(如AspectJ RetentionPolicy.RUNTIME
:在部署和运行时间内可见。例如,可以使用getAnnotations()java reflection
来使用它。 Dagger 2
使用@Scope
注释