[英]What happens when two different annotations have the same name?
我从未遇到过这种情况,现在我想知道:当/如果两个不同的注释具有相同的名称时会发生什么? (我将在这里使用IntelliJ提供的注释给出一个例子,但这个问题非常通用,所以我没有标记它'IntelliJ')
例如这里的第一句话:
http://youtrack.jetbrains.net/issue/IDEABKL-4959
说:
许多库都有自己的@NotNull注释(intellij,hibernate-validation,..)。
如果我想使用IntelliJ的@NotNull
和Hibernate的@NotNull
什么? (再次@NotNull只是我碰巧发现冲突的一个例子)
它们不兼容吗? 如果它们不兼容,是否适用于整个项目?
这是我真的不熟悉的......
没有歧义,因为注释的包名称将在导入或注释本身中指定。
JSR-305解决了您的具体示例。 它寻求一组标准的注释,并特指FindBugs和IntelliJ的可空性注释。
Nullness注释(例如,@ NonNull和@CheckForNull)。 FindBugs和IntelliJ都支持他们自己的nullness注释版本。
在这种情况下,您需要指定完整的限定名称,例如
@bar.baz.Foo
@org.fubar.Foo
void myMethod() {...}
他们没有,因为完整的包是名称的一部分。 结果是您只能导入一个,并且必须使用其完全限定名称引用任何其他名称。 像这样
@NotNull
@com.jetbrains.annotations.NotNull
public Object ...
这并不重要,因为每个注释的完全限定名称将不相同。 您可以在import
部分声明限定名称。
对于具有相同名称的两个类/ interafces / enums / annotations,问题是相同的。 它们应该出现在不同的包中。 如果它们位于相同的包(例如,不同的版本)但是不同的jar /目录中,则选择在类路径中找到的第一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.