有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我从未遇到过这种情况,现在我想知道:当/如果两个不同的注释具有相同的名称,会发生什么(我将在这里给出一个使用IntelliJ提供的注释的示例,但这个问题实际上是泛型的,所以我不会将其标记为“IntelliJ”)

例如,这里的第一句话:

http://youtrack.jetbrains.net/issue/IDEABKL-4959

说:

Many libraries have their own @NotNull annotations (intellij, hibernate-validation, ..).

如果我想同时使用IntelliJ的@NotNull和Hibernate的@NotNull,会发生什么(再次@NotNull只是我碰巧发现冲突的一个例子)

它们是不相容的吗?如果它们不兼容,是否适用于整个项目

这是我真的不熟悉的东西


共 (5) 个答案

  1. # 1 楼答案

    没有歧义,因为注释的包名将在导入中或注释本身上指定

    JSR-305介绍了您的具体示例。它寻求一组标准的注释,并特别提到FindBugs和IntelliJ的空性注释

    Nullness annotations (e.g., @NonNull and @CheckForNull). Both FindBugs and IntelliJ already support their own versions of nullness annotations.

  2. # 2 楼答案

    对于同名的两个类/interafces/枚举/注释,问题是相同的。它们应该出现在不同的包中。如果它们在同一个包(例如,不同的版本)中,但在不同的jar/目录中,则选择在类路径中找到的第一个

  3. # 3 楼答案

    因为完整的包装是名称的一部分,所以它们不需要。这样做的效果是,您只能导入一个,并且必须引用具有完全限定名的任何其他名称。像这样

    @NotNull
    @com.jetbrains.annotations.NotNull
    public Object ...
    
  4. # 4 楼答案

    这无关紧要,因为每个注释的完整限定名都不相同。您可以在import部分声明限定名称

  5. # 5 楼答案

    在这种情况下,您需要指定完整的限定名,例如

    @bar.baz.Foo 
    @org.fubar.Foo
    void myMethod() {...}