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      */

27     protected NullNode() { }
28
29     // To support JDK serialization, recovery of Singleton instance
30     protected Object readResolve() {
31         return instance;
32     }
33     
34     public static NullNode getInstance() { return instance; }
35
36     @Override
37     public JsonNodeType getNodeType() {
38         return JsonNodeType.NULL;
39     }
40
41     @Override public JsonToken asToken() { return JsonToken.VALUE_NULL; }
42
43     @Override public String asText(String defaultValue) { return defaultValue; }
44     @Override public String asText() { return "null"; }
45
46     @SuppressWarnings("unchecked")
47     @Override
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
62     public final void serialize(JsonGenerator g, SerializerProvider provider)
63         throws IOException
64     {
65         provider.defaultSerializeNull(g);
66     }
67
68     @Override
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
76     public int hashCode() {
77         return JsonNodeType.NULL.ordinal();
78     }
79 }
80