Java EclipseGetAnnotation返回@NonNull

Java EclipseGetAnnotation返回@NonNull,java,eclipse,Java,Eclipse,我试图使用Eclipseorg.Eclipse.jdt.annotation.NonNull注释,但我不理解这一点 方法签名: @NonNull MyAnnotation java.lang.reflect.Field.getAnnotation(Class<@NonNull MyAnnotation> annotationClass) Eclipse声明以下代码为死代码 try{ 为什么eclipse认为getAnnotation类返回@NonNull? 文档明确说明它可以返回

我试图使用Eclipse
org.Eclipse.jdt.annotation.NonNull
注释,但我不理解这一点

方法签名:

@NonNull MyAnnotation java.lang.reflect.Field.getAnnotation(Class<@NonNull MyAnnotation> annotationClass)
Eclipse声明以下代码为死代码

try{
为什么eclipse认为
getAnnotation
类返回
@NonNull
? 文档明确说明它可以返回
null

我已经通过一个调试器验证了代码不是死的

编辑: 默认情况下,我不会在任何包上使用@NonNullByDefault

我试过:

  • @Nullable
    添加到MyAnnotation中,我得到
    空值批注“Nullable”不适用于此位置
  • @Nullable MyAnnotation n=field.getAnnotation(MyAnnotation.class)
    还是一样的问题

通过添加第一行删除警告:

Class<MyAnnotation> c = MyAnnotation.class;

if(field.getAnnotation(c)!=null)
    continue;
Class c=MyAnnotation.Class;
if(field.getAnnotation(c)!=null)
继续;
在此之后,我没有收到死亡代码警告


不知何故,Eclipse自动将@NonNull注释添加到MyAnnotation中。

尽管javadocs可能会声明它,但签名会声明它是
@NonNull
,因此根据代码分析和编译器提示(
@NonNull
),代码不应该返回
null
)。如果是这样的话,
@NotNull
位于错误的位置。是的,签名@NonNull位于错误的位置,问题是为什么?如何纠正它?将其移除。很明显,你把它放在那里了,或者Eclipse编译器制作了合成方法之类的东西。我也这么认为。因此,除非您使用不同的JDK(或者可能是特定于eclips的JDK),否则这些注释根本不存在。签名位于JDK函数上。MyAnnotation类没有关于Null的任何注释。它不是。JDK中没有特定于Eclipse的注释(请参阅我的链接)。因此,要么您有一个定制的JDK,要么Eclipse试图变得聪明。
Class<MyAnnotation> c = MyAnnotation.class;

if(field.getAnnotation(c)!=null)
    continue;