我从未遇到过这种情况,现在我想知道:当两个不同的注释具有相同名称时会发生什么? (我将在这里使用IntelliJ提供的注释给出一个例子,但这个问题非常通用,所以我没有标记它'IntelliJ')
例如这里的第一句话:
http://youtrack.jetbrains.net/issue/IDEABKL-4959
表示:
许多图书馆都有自己的@NotNull 注释(intellij, hibernate-validation,..)。
如果我想使用IntelliJ的@NotNull
和Hibernate的@NotNull
,会发生什么? (再次@NotNull只是我碰巧发现冲突的一个例子)
它们不兼容吗?如果它们不兼容,是否适用于整个项目?
这是我真的不熟悉的......
答案 0 :(得分:8)
没有歧义,因为注释的包名称将在导入或注释本身中指定。
JSR-305解决了您的具体示例。它寻求一组标准的注释,并特指FindBugs和IntelliJ的可空性注释。
Nullness注释(例如,@ NonNull 和@CheckForNull)。 FindBugs和 IntelliJ已经支持他们自己了 nullness注释的版本。
答案 1 :(得分:6)
在这种情况下,您需要指定完整的限定名称,例如
@bar.baz.Foo
@org.fubar.Foo
void myMethod() {...}
答案 2 :(得分:2)
他们没有,因为完整的包是名称的一部分。结果是您只能导入一个,并且必须使用其完全限定名称引用任何其他名称。像这样
@NotNull
@com.jetbrains.annotations.NotNull
public Object ...
答案 3 :(得分:1)
这并不重要,因为每个注释的完全限定名称将不相同。您可以在import
部分声明限定名称。
答案 4 :(得分:0)
对于具有相同名称的两个类/ interafces / enums / annotations,问题是相同的。它们应该出现在不同的包中。如果它们在同一个包(例如不同的版本)但是不同的jar /目录中,则选择在类路径中找到的第一个。