我对了解在开发中人们认为哪些Java注解最有用感兴趣。这不一定要限于核心的Java API,你可以包括第三方库中发现的注解或自己开发的注解(请确保包含源链接)。
我真正感兴趣的是常见的开发任务,而不是知道为什么JPA中的@ManyToOne(optional=false)
很棒...
请包括注解及其在一般开发中有用的描述。
我对了解在开发中人们认为哪些Java注解最有用感兴趣。这不一定要限于核心的Java API,你可以包括第三方库中发现的注解或自己开发的注解(请确保包含源链接)。
我真正感兴趣的是常见的开发任务,而不是知道为什么JPA中的@ManyToOne(optional=false)
很棒...
请包括注解及其在一般开发中有用的描述。
我给其他用户分发了一大堆赞,但就我自己而言,在开发中我只使用了编译器直接使用的三个主要注解:
@Override - 用于在代码中明确表明你正在重写另一个方法。此外,它还有一个额外的好处,如果你没有按照你认为的那样覆盖方法(请参阅这个其他SO帖子),它会被标记为编译错误。此标志告诉编译器你打算覆盖某个东西,所以如果你没有这样做(比如在方法签名中遗漏了参数),编译器会捕获它。
@Deprecated - 表示你所标记的任何内容从现在开始不应该再使用。编译器将为你标记为过时的任何代码元素生成警告。通常,"过时"表示 "这个已经存在过,但在将来的版本中可能会消失"。确保你还使用与此相关的 "@deprecated" Javadoc 标志,告诉人们应该使用什么代替。
@SuppressWarnings - 告诉编译器抑制它本来应该生成的特定警告。这对于当你有意想要使用已过时的方法时非常有用,你可以屏蔽过时的警告。我经常使用它来屏蔽大家最喜欢的可序列化类的 "Serialization UID" 警告(无论你是否应该这样做是另一个时间的另一个辩论)。只需在你知道某些行为会生成警告的情况下使用它,但你确信这是你想要的正确行为。
查看Sun注解指南,并查看 "编译器使用的注解" 部分。这三个注解都有一个相当详细的讨论。
我发现Brian Goetz在他的书"Java Concurrency In Practice"中定义的与并发相关的注释非常有用:
它们尤其适用于FindBugs中使用它们的模式。
可以在http://www.javaconcurrencyinpractice.com/上免费获取包和文档。
@Override获得了我的支持。它可以立即清晰地表明你的方法是关于什么的,并使你的代码更易读。
@Deprecated
@deprecated
,但这个注解是一种很好的方式,使其成为方法本身的元信息,而不是文档中的注释。)个人而言,我一直在关注JSR303 Bean Validation及其提供的注释,我想它们会变得更加普遍。目前只有少数JSR的实现,但它们提供了诸如以下注释:
@NotNull private String name;
@NotNull @Size(min = 5, max = 30) private String address;
更多信息请查看这里:http://jcp.org/en/jsr/detail?id=303
。@Nonnull
和@CheckForNull
。 - Christophe Roussy以下这些注解在你的项目中有助于更好地传达意图:
这里是我在日常开发中使用的一些注解:
Spring:
JUnit:
JPA:
我只包含了最基本的注释。您可以从以下链接中找到有关所有JPA注释的详细信息。
http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html
toString()
方法吗?只需用 @ToString
注释你的类即可。@Getter
和 / 或 @Setter
注释你的类,它们将被自动添加。@Slf4j
会为你创建一个私有静态 final 记录器。@Data
public class MyBean {
// Getters for x and y, setter for y and constructor with x as arg automatically created!
// toString() and hashCode() methods are there too!
private final int x;
private int y;
}
.
@Slf4j
public class SomeClass {
public void doSomething() {
log.info("I've got log.");
}
}