Vin*_*uri 5 java enums sonarqube
对于如下定义的枚举
public enum Cars {
SWIFT("Maruti"),
DZIRE("Maruti"),
CIAZ("Maruti"),
I10("Hyundai"),
CRETA("Hyundai");
String company;
Cars(String company){
this.company = company;
}
}
Run Code Online (Sandbox Code Playgroud)
声纳错误
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案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;
}
}
Run Code Online (Sandbox Code Playgroud)
我有10个处于类似状态的枚举,而上述解决方案1并没有给我多少鼓励。解决方案2解决了目的,
但是,为什么我们要引用
Cars.MARUTI而不是MARUTI直接引用呢?这是一个限制吗?
我们如何在枚举中引用一个常量值?
如何在自己的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;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:根据@Basil Bourque的评论,改进了命名约定!
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |