Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Здесь ложное ожидание здесь.
И это касается значений свойств, извлекаемых в форме byte[]
только потому, что вы определили generic-enabled class
class MapJSONHandler<KeyType, ValueType>
Это, к сожалению, неверно , С этой строкой кода
mapper.readValue(file, new TypeReference<HashMap<KeyType, ValueType>>() {})
ObjectMapper#readValue
вернет HashMap<Object, Object>
, потому что универсальные типы теряются. Вы можете видеть, что знания о <String, byte[]>
здесь больше нет.
И вы можете заметить разницу по сравнению с явной установкой типов с помощью
new TypeReference<HashMap<String, byte[]>>() {}
Тогда базовые значения будут иметь любой разрешенный тип, такой как String
, Integer
, Double
или Boolean
. Таким образом,
usersHandler.getValue("foo")
вернет по праву a String
, а не byte[]
.
Если вам нужно преобразовать все значения в byte[]
, вам нужен собственный десериализатор, я думаю, или просто для явной установки универсальных типов.