我最近重构了一些代码并最终出现了一个奇怪的编译器错误
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
没有导致编译器。有人可以向我解释为什么,以及我如何明确引用enum
?
请原谅我的惯例。
答案 0 :(得分:3)
在许多情况下(例如2个具有同名常量的接口都由类实现),引入命名歧义不会立即影响编译,只要这些不明确的名称未被引用,从而导致编译器无法歧义。
在您的情况下,问题是定义可迭代的for-each循环的一部分。
不是将CustomerContract.BillingTerm
解释为enum BilligTerm
,而是将其解释为同名String
实例字段,并且可能会抱怨static
对非static
的引用{1}}成员,忽略了您尝试完全引用enum
的事实。
最佳做法是:
camelBack
作为变量(在这种情况下事实上将达到第1点)