gpt4 book ai didi

java - 将变量声明为 Enum 和 EnumType 之间的区别

转载 作者:行者123 更新时间:2023-12-01 22:47:37 25 4
gpt4 key购买 nike

我的灵感来自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;
  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> 未定义。为了让它发挥作用,我将 Actor 阵容设置为 System.out.println(((MyEnum) wrapped).values());
  • 第 7 点:返回 true
  • 第 8 点:返回 true

令人上瘾的是,用调试器检查,变量共享是相同的对象(相同的对象ID)。
两种类型的声明有何区别?

最佳答案

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

String foo="bla";

Object foo="bla";
<小时/>

Enum<MyEnum>MyEnum 的父类(super class)。因此,当使用父类(super class)时,父类(super class)中已定义的方法可用,但在特定子类中定义的方法在没有类型转换的情况下不可用。当调用特定 enum 中已覆盖的实例方法时类中,子类方法被调用,就像 Java 中一样。

使用Enum<MyEnum>没有多大意义。使用E extends Enum<E>然而,通用代码使用的构造能够处理任意 enum s。喜欢EnumMapEnumSet .

关于java - 将变量声明为 Enum<EnumType> 和 EnumType 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25114306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com