2016-12-17 4 views
1

Я извлекаю значение переменной из Apache Avro GenericRecord, поэтому значение переменной String появляется как «null» вместо null.Есть ли встроенная утилита для проверки «null» String вместо null?

GenericRecord payload = decoder.decode(record.value()); 
String userid = String.valueOf(payload.get("userId")); 
// here userid is null string as "null" 
System.out.println(Strings.isNullOrEmpty(userid)); 

И из-за этого «нулевой» строки, мои sysout печатает как ложь. Как я могу проверить это так, чтобы он печатался, поскольку строка «true» bcoz была пустой строкой. Есть ли встроенная утилита, которая делает это, или я должен написать свою проверку «.equals»?

+1

Вам необходимо исправить основную причину. «null» является допустимой строкой, убедитесь, что вы получаете «null», а не «null» из GenericRecord. [Mr Null] (https://www.wired.com/2015/11/null/) поблагодарит вас. –

+0

Я сомневаюсь, что это возможно bcoz, как я определил схему Avro. –

ответ

1

Возможно, вы создали "null" String самостоятельно с помощью метода String.valueOf(...). Из JavaDoc из String#valueOf:

Возвращает: , если аргумент имеет нулевое значение, то строка равна «нулю»; в противном случае возвращается значение obj.toString().

Таким образом, я предлагаю использовать следующий код:

GenericRecord payload = decoder.decode(record.value()); 
    boolean isNull = payload.get("userId") == null; 
    if (!isNull) { 
     String userid = payload.get("userId").toString(); 
    } 

Это предотвращает проблему сравнения с "null" строки, не генерируя его.

+0

Да, вы правы. Он исходил из 'String.valueOf' –

1

"null" - простой тип строки, просто используйте API String тип: .equals("null") в порядке.

Смежные вопросы