2016-12-17 1 views
1

Ich extrahiere einen Variablenwert von Apache Avro GenericRecord, so dass mein String-Variablenwert als "null" anstelle von null kommt.Gibt es ein eingebautes Dienstprogramm, um nach "null" String statt Null zu suchen?

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)); 

Und wegen dieser "null" string, meine sysout druckt als falsch heraus. Wie kann ich das überprüfen, so dass es als "wahr" ausgibt bcoz String war eine Null-Zeichenfolge. Gibt es eine eingebaute Funktionalität, die das tut oder ich muss meinen eigenen "equals" check schreiben?

+1

Sie müssen die Ursache beheben. "Null" ist eine gültige Zeichenfolge, stellen Sie sicher, dass Sie "null" und nicht "null" aus GenericRecord erhalten. [Mr Null] (https://www.wired.com/2015/11/null/) wird es Ihnen danken. –

+0

Ich bezweifle, dass das möglich ist bcoz das ist, wie Avro-Schema definiert ist, denke ich. –

Antwort

1

Wahrscheinlich generieren Sie den "null" String selbst mit der String.valueOf(...) Methode. Von der JavaDoc von String#valueOf:

Returns: wenn das Argument null ist, dann wird eine Zeichenfolge gleich "null"; Andernfalls wird der Wert von obj.toString() zurückgegeben.

So schlage ich den folgenden Code zu verwenden:

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

Dies das Problem des Vergleichs mit dem "null" String verhindert, indem es nicht zu erzeugen.

+0

Ja, Sie haben Recht. Es kam von 'String.valueOf' –

1

"null" ist ein einfacher String-Typ, verwenden Sie einfach die API String Typ: .equals("null") ist in Ordnung.

Verwandte Themen