gpt4 book ai didi

具有相同名称的 Java 枚举和字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:12 27 4
gpt4 key购买 nike

我最近重构了一些代码,结果遇到了一个奇怪的编译器错误

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 吗?

请原谅公约问题我做作的例子。

最佳答案

在很多情况下(例如,同名常量的 2 个接口(interface)都由一个类实现),引入命名歧义不会立即影响编译,只要不引用那些歧义的名称,从而导致编译器无法消除歧义。

在您的情况下,问题是定义可迭代对象的 for-each 循环的一部分。

它不是将 CustomerContract.BillingTerm 解释为 enum BilligTerm,而是将其解释为同名的 String 实例字段,并且可能会提示static 对非 static 成员的引用,忽略了您试图完全引用 enum 的事实。

最佳做法是:

  • 不要用嵌套类/枚举的名称隐藏字段名称
  • 遵循变量命名conventions并使用 camelBack 作为变量(在这种情况下实际上会达到第 1 点)

关于具有相同名称的 Java 枚举和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39917386/

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