• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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