我从java.sql.SQLException: Data truncated for column 'gender' at row 1 for enum获得了灵感 我有这个枚举
public enum MyEnum {
Value1,
Value2;
}
以及此示例代码:
MyEnum raw = MyEnum.Value1;
Enum<MyEnum> wrapped = MyEnum.Value1;
System.out.println(raw);
System.out.println(wrapped);
System.out.println(raw.getDeclaringClass());
System.out.println(wrapped.getDeclaringClass());
System.out.println(Arrays.toString(raw.values()));
System.out.println(wrapped.values());
System.out.println(raw.equals(wrapped));
System.out.println(wrapped.equals(raw));
而
Enum<MyEnum>
。为了使其有效,我将演员阵容设为System.out.println(((MyEnum) wrapped).values());
true
true
另外,使用调试器检查,变量共享是相同的对象(相同的对象ID) 两种声明之间有哪些区别?
答案 0 :(得分:2)
区别很简单:它与
之间的区别相同String foo="bla";
和
Object foo="bla";
Enum<MyEnum>
是MyEnum
的超类。因此,在使用超类时,已经在超类中定义的方法可用,但是在没有类型转换的情况下,特定子类中定义的方法不可用。在调用已在特定enum
类中重写的实例方法时,将调用子类方法,与Java一样。
使用Enum<MyEnum>
没有多大意义。然而,使用E extends Enum<E>
是通用代码使用的构造,能够处理任意enum
s。与EnumMap
或EnumSet
一样。
答案 1 :(得分:1)
两种声明之间的区别是什么?
MyEnum extends Enum<MyEnum>
所以对象将完全相同,只有引用的类型不同。