为什么 EnumMap 为空值分配一个 Object class 对象?
Why EnumMap assign a Object class object for null values?
我正在研究 Java EnumMap 实现,发现如果我将空值传递给 EnumMap,EnumMap 会分配一个对象 class 对象来代替空值。
来自 EnumMap 的代码 Class:
public V put(K key, V value) {
typeCheck(key);
int index = key.ordinal();
Object oldValue = vals[index];
vals[index] = maskNull(value);
if (oldValue == null)
size++;
return unmaskNull(oldValue);
}
private Object maskNull(Object value) {
return (value == null ? NULL : value);
}
private static final Object NULL = new Object() {
public int hashCode() {
return 0;
}
public String toString() {
return "java.util.EnumMap.NULL";
}
};
我的问题是为什么 java 放置一个对象而不是直接为给定键分配一个空值。这样做有什么好处java。
它可以区分从未添加到地图的键和添加了 null
值的键。您甚至可以在引用的代码中看到这一点:
if (oldValue == null)
size++;
如果 null
之前用这个键放入地图,oldValue
将是 NULL
并且大小不会改变。
我正在研究 Java EnumMap 实现,发现如果我将空值传递给 EnumMap,EnumMap 会分配一个对象 class 对象来代替空值。
来自 EnumMap 的代码 Class:
public V put(K key, V value) {
typeCheck(key);
int index = key.ordinal();
Object oldValue = vals[index];
vals[index] = maskNull(value);
if (oldValue == null)
size++;
return unmaskNull(oldValue);
}
private Object maskNull(Object value) {
return (value == null ? NULL : value);
}
private static final Object NULL = new Object() {
public int hashCode() {
return 0;
}
public String toString() {
return "java.util.EnumMap.NULL";
}
};
我的问题是为什么 java 放置一个对象而不是直接为给定键分配一个空值。这样做有什么好处java。
它可以区分从未添加到地图的键和添加了 null
值的键。您甚至可以在引用的代码中看到这一点:
if (oldValue == null)
size++;
如果 null
之前用这个键放入地图,oldValue
将是 NULL
并且大小不会改变。