静态内部类的Eclipse外部注释格式是什么?

静态内部类的Eclipse外部注释格式是什么?,eclipse,external-annotations,Eclipse,External Annotations,我正在尝试为静态内部类Map.Entry编写Eclipse外部注释文件。我该怎么做 我在所有外部注释文件所在的文件夹下的java/util子文件夹中创建了一个名为Map$Entry.eea的文件。以下是该文件的内容 class java/util/Map$Entry comparingByKey <K::Ljava/lang/Comparable<-TK;>;V:Ljava/lang/Object;>()Ljava/util/Comparator<Ljava/u

我正在尝试为静态内部类Map.Entry编写Eclipse外部注释文件。我该怎么做

我在所有外部注释文件所在的文件夹下的
java/util
子文件夹中创建了一个名为
Map$Entry.eea
的文件。以下是该文件的内容

class java/util/Map$Entry

comparingByKey
 <K::Ljava/lang/Comparable<-TK;>;V:Ljava/lang/Object;>()Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
 <K::Ljava/lang/Comparable<-TK;>;V:Ljava/lang/Object;>()L1java/util/Comparator<L1java/util/Map$Entry<T1K;TV;>;>;

comparingByKey
 <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/Comparator<-TK;>;)Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
 <K:Ljava/lang/Object;V:Ljava/lang/Object;>(L1java/util/Comparator<-TK;>;)L1java/util/Comparator<L1java/util/Map$Entry<TK;TV;>;>;

comparingByValue
 <K:Ljava/lang/Object;V::Ljava/lang/Comparable<-TV;>;>()Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
 <K:Ljava/lang/Object;V::Ljava/lang/Comparable<-TV;>;>()L1java/util/Comparator<L1java/util/Map$Entry<TK;T1V;>;>;

comparingByValue
 <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/Comparator<-TV;>;)Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
 <K:Ljava/lang/Object;V:Ljava/lang/Object;>(L1java/util/Comparator<-TV;>;)L1java/util/Comparator<L1java/util/Map$Entry<TK;TV;>;>;

equals
 (Ljava/lang/Object;)Z
 (L0java/lang/Object;)Z

getKey
 ()TK;
 ()TK;

getValue
 ()TV;
 ()TV;

setValue
 (TV;)TV;
 (TV;)TV;
警告是:

Unsafe interpretation of method return type as '@NonNull' based on the receiver type
'Map.<@NonNull Entry<@Nullable String, @NonNull Object>>'. Type Map.Entry<K, V> doesn't seem
to be designed with null type annotations in mind.
基于接收方类型将方法返回类型不安全地解释为'@NonNull'
“地图。”。类型映射。条目似乎不正确
设计时应考虑空类型注释。

getValue
之后的第二行必须是
()T1V
而不是
()电视对于
@NonNull

class java/util/Map$Entry
getValue
 ()TV;
 ()T1V;
对于
@Nullable
,它将是
()T0V

但是,由于映射条目的值可以为null(),因此应该只在
@NonNullObject value=entry.getValue()处出现警告如果
条目
的类型是
Map.entry
,但如果类型是
Map.entry
,则不是。要告诉Eclipse,
Map.Entry
是用空类型注释设计的,java/util/Map$Entry.eea
文件必须几乎为空:

class java/util/Map$Entry
但是要小心,如果对
Map
执行相同的操作,那么
@NonNull Object o=Map.get(“foo”)。必须显式注释所有
@Nullable
类型参数:

class java/util/Map
get
 (Ljava/lang/Object;)TV;
 (Ljava/lang/Object;)T0V;

另请参见:

升级到Eclipse Oxygen(4.7.0)版本20170620-1800解决了该问题
Map$Entry.eea可以保留问题中的状态,编译器警告会在适当的时间出现。如果
Map.Entry
V
在code中为
@NonNull
,则
getValue()
的返回类型为
@NonNull
。如果
Map.Entry
V
在code中是
@Nullable
,则
getValue()
的返回类型是
@Nullable

问题中的代码不再引起编译器警告。下面的代码可以(这是预期的和需要的)

Map.Entry;
...
entry.getValue().toString();

如果我有一个
Map.Entry entry1和a
Map.Entry entry2。在一个例子中,我需要
()T1V()T0V。如何处理这两种情况?对于某些映射,允许使用空值(即@Nullable V)。对于其他映射,不允许使用空值(即@NonNull V)。在后一种情况下,
Map.get()。很遗憾,我们不能指定
()电视
和Eclipse将查看
V
的定义,以确定它是@NonNull还是@Nullable。Eclipse查看V的定义,以确定它是
@NonNull
还是
@Nullable
是否存在该类的外部注释文件,但此特定方法的V没有外部注释。
class java/util/Map
get
 (Ljava/lang/Object;)TV;
 (Ljava/lang/Object;)T0V;
Map.Entry<@NonNull String, @Nullable Object> entry;
...
entry.getValue().toString();