有用的Java注释

Jon*_*Jon 18 java annotations development-environment

我很想知道人们认为哪些Java注释在开发过程中最有用.这不一定限于核心Java API,您可以包含您在第三方库中找到的注释或您自己开发的注释(确保包含指向源的链接).

我真的对常见的开发任务很感兴趣,而不是知道为什么@ManyToOne(optional=false)JPA很棒......

包括注释和对一般开发有用的原因的描述.

Bre*_*ode 21

我为其他用户发了一堆upvotes,但只是为了给我的两分钱,我在开发中使用的唯一三个注释是编译器直接使用的主要注释:

@Override - 当你覆盖另一个方法时,非常适合在代码中使它显式化.如果你没有按照你认为的方式覆盖方法,那么还有被标记为编译错误的额外好处(参见其他SO帖子).此标志通知编译器您打算覆盖某些内容,因此如果不这样(例如,您忘记了方法签名中的参数),编译器将捕获它.

@Deprecated - 指出你要标记的任何东西,从这一点开始不应该使用.编译器将生成警告,以使用您标记为已弃用的任何代码元素.一般来说,弃用表示"过去曾出现在这里,但未来的版本可能会消失." 确保你也使用相关的"@deprecated"Javadoc标志,以告诉人们应该使用它们.

@SuppressWarnings - 告诉编译器抑制它否则会生成的特定警告.这对于有意使用弃用方法的内容非常有用,您可以阻止弃用警告.我倾向于使用它来阻止每个人在序列化类上最喜欢的"序列化UID"警告(无论你是否应该这样做是另一次辩论).对于那些您知道正在做的事情正在产生警告的情况,只是方便,但您100%确定这是您想要的正确行为.

查看Sun Annotations Guide并查看"编译器使用的注释"部分.对这三个问题进行了相当冗长的讨论.


Ste*_*ker 13

Java并发实践注解

非常有用于准确描述代码是如何或不是线程安全的...


Guu*_*uus 11

我发现Brian Goetz在他的书"Java Concurrency In Practice"中定义的与并发相关的注释非常有用:

  • @GuardedBy
  • @Immutable
  • @NotThreadSafe
  • @ThreadSafe

它们特别有用,因为FindBugs具有使用它们的模式.

可以在http://www.javaconcurrencyinpractice.com/免费获得jar和文档.


mR_*_*r0g 9

@Override有我的投票.它可以立即清楚您的方法是什么,并使您的代码更具可读性.

  • 就像Greg所说的那样,@ Overver不仅仅是一个IDE,它可以被任何支持注释的Java编译器检查.这是一个有用的理智检查.想象一下,您希望subclass.foo覆盖class.foo但您不小心定义了class.foo(Object)和subclass.foo(SubclassOfObject).然后说你有一个名为"x"的"SubclassOfObject"实例.如果你调用subclass.foo(x)并且你将"x"作为Object传递,它将调用class.foo,但如果你将"x"作为SubclassOfObject传递,你将得到子类. FOO.如果使用@Override标记了subclass.foo,编译器会捕获它.希望有道理. (4认同)

Rob*_*ska 7

@Test

(JUnit 4)它使编写和理解测试文件更加清晰.此外,添加expected属性的功能在这里和那里保存了几行代码.


Rob*_*ska 7

@Deprecated

在Java 5中引入.

  • 它可以帮助开发人员了解IDE中已弃用的内容.(在此之前,大多数IDE仍然可以@deprecated从特定方法的javadoc注释中删除,但是这个注释是一种很好的方法,可以使它成为关于方法本身的元信息,而不是文档中的注释.)
  • 当您使用已弃用的方法时,编译器也会使用它来打印警告.

  • 遗憾的是,它没有将描述性评论作为参数.想看看@deprecated("不安全的方法,请改用blah blah") (3认同)

Jon*_*Jon 7

我个人一直在看JSR303 Bean Validation及其提供的注释,我想这些将变得更加普遍,到目前为止只有少数JSR实现,但是它们提供了注释,例如:

@NotNull private String name;
@NotNull @Size(min = 5, max = 30) private String address;
Run Code Online (Sandbox Code Playgroud)

更多信息请访问:http://jcp.org/en/jsr/detail?id = 303


dfa*_*dfa 6

这些应该是有用的,您可以在项目中定义它们以更好地传达意图:

  • @ThreadSafe
  • @Immutable
  • @ValueObject
  • @BagOfFunctions(例如java.util.Collections)
  • 等等


Pri*_*ota 5

以下是我在日常开发中使用的一些注释

春天:

  1. @Autowired - 用于自动连接 bean
  2. @Rollback - 如果设置为 true,它将回滚测试用例中完成的所有数据库操作

单位:

  1. @Test - 告诉一个方法是一个测试用例
  2. @Ignore - 如果您想忽略任何测试用例
  3. @Before - 应该在每个测试用例之前运行的代码

JPA:

  1. @Entity - 说明 POJO 是 JPA 实体
  2. @Column - 将属性映射到 DB 列
  3. @Id - 告诉 java 属性是主键
  4. @EmbeddedId - 用于复合主键
  5. @Transient - 这个属性不应该被持久化
  6. @Version - 用于管理乐观锁
  7. @NamedQuery - 用于声明本机 SQL
  8. @OneToMany - 一对多关系
  9. @ManyToOne - 多对一关系

我只包含了最重要的部分。您可以从以下链接中找到有关所有 JPA 注释的详细信息。

http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html

http://www.hiberbook.com/