繁体   English   中英

当两个不同的注释具有相同的名称时会发生什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM