1 package com.fasterxml.jackson.databind.node; 2 3 import java.io.IOException; 4 5 import com.fasterxml.jackson.core.*; 6 import com.fasterxml.jackson.databind.JsonNode; 7 import com.fasterxml.jackson.databind.SerializerProvider; 8 9 10 /** 11 * This singleton value class is used to contain explicit JSON null 12 * value. 13 */ 14 public class NullNode 15 extends ValueNode 16 { 17 // // Just need a fly-weight singleton 18 19 private static final long serialVersionUID = 1L; 20 21 public final static NullNode instance = new NullNode(); 22 23 /** 24 *<p> 25 * NOTE: visibility raised to `protected` in 2.9.3 to allow custom subtypes. 26 */ NullNode()27 protected NullNode() { } 28 29 // To support JDK serialization, recovery of Singleton instance readResolve()30 protected Object readResolve() { 31 return instance; 32 } 33 getInstance()34 public static NullNode getInstance() { return instance; } 35 36 @Override getNodeType()37 public JsonNodeType getNodeType() { 38 return JsonNodeType.NULL; 39 } 40 asToken()41 @Override public JsonToken asToken() { return JsonToken.VALUE_NULL; } 42 asText(String defaultValue)43 @Override public String asText(String defaultValue) { return defaultValue; } asText()44 @Override public String asText() { return "null"; } 45 46 @SuppressWarnings("unchecked") 47 @Override requireNonNull()48 public JsonNode requireNonNull() { 49 return _reportRequiredViolation("requireNonNull() called on `NullNode`"); 50 } 51 52 // as with MissingNode, not considered number node; hence defaults are returned if provided 53 54 /* 55 public int asInt(int defaultValue); 56 public long asLong(long defaultValue); 57 public double asDouble(double defaultValue); 58 public boolean asBoolean(boolean defaultValue); 59 */ 60 61 @Override serialize(JsonGenerator g, SerializerProvider provider)62 public final void serialize(JsonGenerator g, SerializerProvider provider) 63 throws IOException 64 { 65 provider.defaultSerializeNull(g); 66 } 67 68 @Override equals(Object o)69 public boolean equals(Object o) { 70 // 29-Aug-2019, tatu: [databind#2433] Since custom sub-classes are allowed (bad idea probably), 71 // need to do better comparison 72 return (o == this) || (o instanceof NullNode); 73 } 74 75 @Override hashCode()76 public int hashCode() { 77 return JsonNodeType.NULL.ordinal(); 78 } 79 } 80