このサンプルコードで警告を取り除く方法。TreeMapのeclipseネオンで "Null型安全"警告を取り除く方法
私は、Java 1.8とEclipseのネオンを使用してorg.eclipse.jdt.annotation_2.1.0
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
@NonNullByDefault
public class NullAnnotationTest4 {
public static void main(String[] args) {
final TreeMap<@Nullable Integer, @Nullable String> treeMap = new TreeMap<>();
treeMap.put(3, "Test1");
treeMap.put(null, null);
//This produces the warning
final Set<@Nullable Entry<@Nullable Integer, @Nullable String>> set = treeMap.entrySet();
for (final Iterator<@Nullable Entry<@Nullable Integer, @Nullable String>> it = set.iterator(); it.hasNext();) {
final Entry<@Nullable Integer, @Nullable String> entry = it.next();
if (entry != null && entry.getKey() == null && entry.getValue() != null)
System.out.println(entry.getKey()+" is mapped to "+entry.getValue());
}
}
}
警告がある:私は@Nullableとのいくつかの組み合わせを試してみました
Null type safety (type annotations):
The expression of type
'Set<Map.Entry<@Nullable Integer,@Nullable String>>'
needs unchecked conversion to conform to
'Set<[email protected] Entry<@Nullable Integer,@Nullable String>>'
@ NonNullable。同じような場合には、? extends
も提案されています。https://bugs.eclipse.org/bugs/show_bug.cgi?id=507779
しかし、警告は常に移動しますが、決して完全に消えません。
アップデート:私はこのラインを使用して警告を処分した
:
final Set<? extends @Nullable Entry<@Nullable Integer, @Nullable String>> set = treeMap.entrySet();
しかし、私は全く理由のよう失っています。トラックや何かを失うことでバリデーターを騙してしまい、コードが実際に醜い状態に陥り始めるのです。
全新しいコード:
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
@NonNullByDefault
public class NullAnnotationTest4 {
public static void main(String[] args) {
final TreeMap<@Nullable Integer, @Nullable String> treeMap = new TreeMap<>();
treeMap.put(3, "Test1");
treeMap.put(null, null);
final Set<? extends @Nullable Entry<@Nullable Integer, @Nullable String>> set = treeMap.entrySet();
for (final Iterator<? extends @Nullable Entry<@Nullable Integer, @Nullable String>> it = set.iterator(); it.hasNext();) {
final Entry<@Nullable Integer, @Nullable String> entry = it.next();
if (entry != null && entry.getKey() == null && entry.getValue() != null)
System.out.println(entry.getKey()+" is mapped to "+entry.getValue());
}
}
}
アップデート2ショーティは、間違ったコードを貼り付けます。
'set'変数は' Set> 'でなければなりませんか?エントリセット内のエントリはおそらく決してnullにはなりません。 –
まずそれを試しました。しかし、そのエラーは、Set
Torge