Распаковка 'map.get(key)' может привести к 'NullPointerException'

Этот код

public static int getValue(int key) {
    return map.get(key);
}

private static Map<Integer, Integer> map;
static {
    map = new HashMap<>();
    map.put(1, 1);
    map.put(2, 2);
}

выдает предупреждение Lint

Распаковка 'map.get(key)' может привести к 'NullPointerException'

Это предупреждение можно исправить, проверив null:

public static int getValue(int key) {
    Integer n = map.get(key);
    return n != null ? n : -42;
}

Есть ли способ лучше?


person activity    schedule 04.06.2020    source источник
comment
Пусть вместо этого getValue вернет Integer. Но опять же, вы, вероятно, получите еще одно предупреждение, когда попытаетесь использовать это возвращаемое значение где-то еще.   -  person QBrute    schedule 04.06.2020
comment
Это работает - и нигде больше не появляется новое предупреждение.   -  person activity    schedule 04.06.2020
comment
Вероятно, это работает, потому что каждый метод по умолчанию имеет аннотацию NonNull. Когда я добавляю аннотацию Nullable к getValue, в вызывающем методе появляется предупреждение.   -  person activity    schedule 04.06.2020


Ответы (1)


Начиная с Java 8, вы можете использовать getOrDefault в соответствии с документацией: https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java.lang.Object-V-< /а>

person codebod    schedule 04.06.2020