gpt4 book ai didi

Java:如何在其类型定义中修改当前枚举的值?

转载 作者:搜寻专家 更新时间:2023-11-01 04:05:15 24 4
gpt4 key购买 nike

我定义了一个实现接口(interface)的枚举类型,如下所示:

public enum MyEnum implements MyInterface
{
val1, val2, val3;
private MyEnum() {}
private MyEnum(Parcel in)
{
readFromParcel(in);
}

public void readFromParcel(Parcel in)
{
MyEnum val = MyEnum.values()[in.readInt()];
// ??? How to I assign val to my current enum?
}

}

如何访问当前枚举对象的值,以便在 readFromParcel() 中进行赋值? (请看代码中的注释)

最佳答案

在实例方法中,您可以将“当前 enum 对象”简单地称为 this。它以这种方式工作,因为 enum 常量是实际对象,即 class 的实例——一种非常特殊的 class 类型,但是 class 尽管如此。 (请注意,我提到这些是 enum 常量:Java 中的惯例是在命名常量时使用所有大写字母。)

您对 values() 的使用也很奇特(更不用说它会执行得非常糟糕,因为每次调用都必须构造一个新数组)。也许你想看看 EnumMap , 这是一种特殊的 Map针对 enum 常量作为键进行了优化。

如果您试图改变这些 enum 常量中包含的字段,那么您应该认真考虑重新设计。无论如何,您通常应该尽量减少可变性,但是让这些 static 单例可变听起来并不是一个好的设计。与在 enum 常量本身中固有这些可变字段不同,从常量到这些可变值的 Map 将是一个更好的设计。

另见

  • Java Tutorials/enum
  • Effective Java 第二版
    • 第 15 项:最小化可变性
    • 条款 31:使用实例字段而不是序数
    • 项目 32:使用 EnumSet而不是位域
    • 项目 33:使用 EnumMap而不是顺序索引

关于Javaenum的各种问题

关于Java:如何在其类型定义中修改当前枚举的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3335398/

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