Почему байт [] превращается в строку?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
1
задан Maciej Pankanin 4 April 2019 в 23:08
поделиться

1 ответ

Здесь ложное ожидание здесь.
И это касается значений свойств, извлекаемых в форме byte[] только потому, что вы определили generic-enabled class

class MapJSONHandler<KeyType, ValueType>

Это, к сожалению, неверно , С этой строкой кода

mapper.readValue(file, new TypeReference<HashMap<KeyType, ValueType>>() {})

ObjectMapper#readValue вернет HashMap<Object, Object>, потому что универсальные типы теряются. Вы можете видеть, что знания о <String, byte[]> здесь больше нет.

enter image description here

И вы можете заметить разницу по сравнению с явной установкой типов с помощью

 new TypeReference<HashMap<String, byte[]>>() {}

enter image description here [ 1122]


Тогда базовые значения будут иметь любой разрешенный тип, такой как String, Integer, Double или Boolean. Таким образом,

usersHandler.getValue("foo")

вернет по праву a String, а не byte[].


Если вам нужно преобразовать все значения в byte[], вам нужен собственный десериализатор, я думаю, или просто для явной установки универсальных типов.

0
ответ дан LppEdd 4 April 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: