静态内部类的Eclipse外部注释格式是什么?
我正在尝试为静态内部类Map.Entry编写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
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代码>和aMap.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();