Comment se débarrasser de l'avertissement dans cet exemple de code.Comment se débarrasser de l'avertissement "Sécurité de type Null" dans eclipse neon pour TreeMap
J'utilise Eclipse Neon avec Java 1.8 et 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());
}
}
}
L'avertissement est:
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>>'
J'ai essayé plusieurs combinaisons de @Nullable et @ NonNullable Même ? extends
comme cela a été suggéré dans un cas similaire ici: https://bugs.eclipse.org/bugs/show_bug.cgi?id=507779
Mais l'avertissement se déplace toujours mais ne disparaît jamais complètement.
Mise à jour:
je me suis débarrassé de l'avertissement en utilisant cette ligne:
final Set<? extends @Nullable Entry<@Nullable Integer, @Nullable String>> set = treeMap.entrySet();
Mais je suis totalement perdu au pourquoi. Il me semble que je trompe le validateur en perdant la piste ou quelque chose et le code commence vraiment à devenir moche.
nouveau code complet:
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());
}
}
}
Update 2 Shorty collé le mauvais code.
La variable 'set' ne devrait-elle pas être juste Set>'? Les entrées de l'ensemble d'entrées ne devraient probablement jamais être nulles. –
J'ai essayé cela en premier. Mais alors l'erreur est qu'il ne peut pas convertir 'Set
Torge