繁体   English   中英

声明变量为Enum之间的区别 <EnumType> 和EnumType

[英]Difference between declare variable as Enum<EnumType> and EnumType

我从java.sql.SQLException中得到了启发:枚举的第1行的“ gender”列的数据被截断了
我有这个枚举

public enum MyEnum {
  Value1,
  Value2;
}

和此示例代码:

MyEnum raw = MyEnum.Value1;
Enum<MyEnum> wrapped = MyEnum.Value1;
  1. System.out.println(raw);
  2. System.out.println(wrapped);
  3. System.out.println(raw.getDeclaringClass());
  4. System.out.println(wrapped.getDeclaringClass());
  5. System.out.println(Arrays.toString(raw.values()));
  6. System.out.println(wrapped.values());
  7. System.out.println(raw.equals(wrapped));
  8. System.out.println(wrapped.equals(raw));

而对于

  • 点1-2、3-4 :返回相同的结果
  • 第5点 :返回[Value1,Value2](但应以静态方式访问才正确)
  • 点6 :编译错误:类型Enum<MyEnum>不确定。 为了使其正常工作,我将演员表放置为System.out.println(((MyEnum) wrapped).values());
  • 要点7 :返回true
  • 要点8 :返回true

沉迷于调试器中,变量共享是相同的对象(相同的对象ID)。
两种类型的声明有哪些区别?

区别很简单:与两者之间的区别相同

String foo="bla";

Object foo="bla";

Enum<MyEnum>是超类MyEnum 因此,在使用超类时,可以使用已经在超类中定义的方法,但是如果没有类型转换,则无法在特定子类中定义的方法。 调用已在特定enum类中重写的实例方法时,将像在Java中一样调用子类方法。

使用Enum<MyEnum>没有多大意义。 但是,使用E extends Enum<E>是通用代码使用的结构,能够处理任意enum s。 就像EnumMapEnumSet

两种类型的声明有哪些区别?

MyEnum extends Enum<MyEnum>因此对象将完全相同,只是引用的类型不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM