gpt4 book ai didi

java - java中使用私有(private)静态成员构造枚举

转载 作者:行者123 更新时间:2023-11-29 08:32:45 24 4
gpt4 key购买 nike

考虑以下枚举结构:

public enum MyEnum {
ENUM_A(TYPE1), ENUM_B(TYPE2), ENUM_C(TYPE1), ENUM_D(TYPE1);
private static final String TYPE1 = "I am type 1";
private static final String TYPE2 = "This is type 2";
private final String type;
private MyEnum(String type) {
this.type = type;
}
public String getType() {
return type;
}
}

上面的代码无法编译,因为编译器提示非法前向引用。我有点理解为什么常量是在枚举的之后定义的。

但是,不能将常量移动到枚举定义之上/之前,因为这是枚举限制/设计,枚举定义必须是枚举类中的第一件事。

现在如果代码改为:

public enum MyEnum {
ENUM_A(MyEnum.TYPE1), ENUM_B(MyEnum.TYPE2), ENUM_C(MyEnum.TYPE1), ENUM_D(MyEnum.TYPE1);
private static final String TYPE1 = "I am type 1";
private static final String TYPE2 = "This is type 2";
private final String type;
private MyEnum(String type) {
this.type = type;
}
public String getType() {
return type;
}
}

然后它似乎工作。

我的问题是:更改后的代码是否会带来任何潜在问题,即使它可以编译?为什么更改可以绕过编译器检查?这被认为是一种标准方法还是一种绕过编译器检查的方法,将来可能会修复?

最佳答案

这是一个完全可以接受的解决方案,除了额外的困惑之外,我想不出任何缺点。

如果您想消除困惑,您可以利用 接口(interface) 可以保存常量值这一事实。对于某些编码人员来说,这可能违反了最小惊奇原则,但我会在我的代码中接受它。

private interface MyConstants {
String TYPE1 = "I am type 1";
String TYPE2 = "This is type 2";
}

public enum MyEnum implements MyConstants{
ENUM_A(TYPE1), ENUM_B(TYPE2), ENUM_C(TYPE1), ENUM_D(TYPE1);
private final String type;
private MyEnum(String type) {
this.type = type;
}
public String getType() {
return type;
}
}

关于java - java中使用私有(private)静态成员构造枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589990/

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