gpt4 book ai didi

java - 为枚举字符串值定义常量 "Value"

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:49 25 4
gpt4 key购买 nike

对于如下定义的枚举

public enum Cars {

SWIFT("Maruti"),
DZIRE("Maruti"),
CIAZ("Maruti"),
I10("Hyundai"),
CRETA("Hyundai");

String company;
Cars(String company){
this.company = company;
}
}

有 Sonar 错误

定义一个常量,而不是将这个文字“Maruti”复制 3 次。

如果我们定义静态字符串,编译失败

无法在定义前引用字段

解决方案一:

public enum Cars {

SWIFT(CarsString.MARUTI.companyName),DZIRE("Maruti"), I10("Hyundai"), CRETA("Hyundai");

static String MARUTI = "Maruti";
String company;
Cars(String company){
this.company = company;
}

enum CarsString {
MARUTI("maruti"),
HYUNDAI("Hyundai");
String companyName;
CarsString(String companyName){
this.companyName = companyName;
}
}
}

解决方案 2:

不确定这是否是我们的做法。当它未被 Cars.MARUTI 引用时,它会出错 Cannot reference a field before it is defined

public enum Cars {

SWIFT(Cars.MARUTI),DZIRE(Cars.MARUTI), I10("Hyundai"), CRETA("Hyundai");

public static final String MARUTI = "Maruti";
String company;
Cars(String company){
this.company = company;
}
}

我有 10 个处于相似状态的枚举,上面的解决方案 1 并没有给我太大的鼓励。方案二解决目的,

but why should we refer by Cars.MARUTI and not MARUTI directly? is that a limitation ?

我们如何在枚举中引用常量值?

最佳答案

如何在自己的 Enum 中定义公司?例如:

public enum Car {
SWIFT(Company.MARUTI),
DZIRE(Company.MARUTI),
CIAZ(Company.MARUTI),
I10(Company.HYUNDAI),
CRETA(Company.HYUNDAI);

Company company;

Cars(Company company) {
this.company = company;
}
}

public enum Company {
HYUNDAI("Hyundai"),
MARUTI("Maruti");

String name;

Company(String name) {
this.name = name;
}
}

更新:根据@Basil Bourque 的评论改进了命名约定,谢谢!

关于java - 为枚举字符串值定义常量 "Value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57705015/

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