【发布时间】:2019-08-29 07:20:37
【问题描述】:
对于如下定义的枚举
public enum Cars {
SWIFT("Maruti"),
DZIRE("Maruti"),
CIAZ("Maruti"),
I10("Hyundai"),
CRETA("Hyundai");
String company;
Cars(String company){
this.company = company;
}
}
有声纳错误
Define a constant instead of duplicating this literal "Maruti" 3 times.
如果我们定义静态字符串,编译失败
Cannot reference a field before it is defined
解决方案 1:
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 并没有给我太多鼓励。方案2解决了目的,
但是我们为什么要直接引用
Cars.MARUTI而不是MARUTI?这是限制吗?
我们如何在枚举中引用一个常量?
【问题讨论】:
-
@AmitBera
but why should we refer by Cars.MARUTI and not MARUTI directly ? is that a limitation ?这是我不知道的附加问题 -
请参考我的回答以获得解释。谢谢。