Java 为什么EnumMap实现要检查密钥';什么是超类? 私有布尔值isValidKey(对象密钥){ if(key==null) 返回false; //比紧跟着getDeclaringClass的Enum实例便宜 Class keyClass=key.getClass(); 返回keyClass==keyType | | keyClass.getSuperclass()==keyType; }
如上面方法的最后一行所示,为什么EnumMap实现要检查键的超类?如果无法从枚举派生任何内容,为什么需要此检查?您可以声明以自定义其行为Java 为什么EnumMap实现要检查密钥';什么是超类? 私有布尔值isValidKey(对象密钥){ if(key==null) 返回false; //比紧跟着getDeclaringClass的Enum实例便宜 Class keyClass=key.getClass(); 返回keyClass==keyType | | keyClass.getSuperclass()==keyType; },java,enum-map,Java,Enum Map,如上面方法的最后一行所示,为什么EnumMap实现要检查键的超类?如果无法从枚举派生任何内容,为什么需要此检查?您可以声明以自定义其行为 private boolean isValidKey(Object key) { if (key == null) return false; // Cheaper than instanceof Enum followed by getDeclaringClass Class<?> keyClass =
private boolean isValidKey(Object key) {
if (key == null)
return false;
// Cheaper than instanceof Enum followed by getDeclaringClass
Class<?> keyClass = key.getClass();
return keyClass == keyType || keyClass.getSuperclass() == keyType;
}
这些常量实现为
枚举常量的可选类主体隐式定义
匿名类声明(§15.9.5),立即扩展
封闭枚举类型
要使EnumMap
映射与所有enum
常量一起工作,它需要通过检查键的超类是否是用于初始化EnumMap
的enum
类型来检查这种可能性。keyType)。FYI仅供参考:具有类似实体的enum类似于匿名类。如果查看编译后的.class文件,您将看到,例如,此处显示的类将创建Bar.class
和Bar$1.class
。
enum Bar {
NORMAL, CUSTOM {
@Override
public String toString() {
return "different";
}
};
}