我最近重构了一些代码,最终遇到了奇怪的编译器错误
class CustomerContract{
public enum BillingTerm{
MONTHLY,QUARTERLY,YEARLY;
}
public String BillingTerm = "";
}
class SalesProposal{
public String billingCycles(){
String message = "We have several billing cycles available: \n";
for(CustomerContract.BillingTerm term : CustomerContract.BillingTerm.values()){
message += " - " + term.toString() + "\n";
}
return message;
}
}
我在SalesProposal上收到一个编译器错误,因为它尝试访问String而不是枚举.
我很惊讶的是,CustomerContract并未引起编译器.有人可以向我解释原因,以及如何明确引用枚举吗?
请原谅我提出的例子.
解决方法:
与许多情况一样(例如,两个具有相同名称常量的接口都由一个类实现),只要不引用那些歧义的名称,引入命名歧义不会立即影响编译,从而导致编译器无法歧义化.
在您的情况下,问题是for-each循环中定义可迭代的部分.
它没有将CustomerContract.BillingTerm解释为枚举BilligTerm,而是将其解释为同义的String实例字段,并且可能会抱怨对非静态成员的静态引用,而忽略了您试图完全引用枚举的事实.
最佳做法是:
>不要用嵌套的类/枚举名称遮盖字段名称
>按照变量命名为conventions并使用camelBack作为变量(在这种情况下,实际上会达到第1点)
标签:enums,java
来源: https://codeday.me/bug/20191118/2025508.html