0

虽然我们都知道在接口而不是类中声明常量(出于简洁的原因)是邪恶的,因为它会污染 Java 5 的命名空间并发布 Java 5,但您可以使用静态导入来减少冗长(有效的 Java 条款 17)。但是,我的一位同事指出,在类中定义变量时,开发人员可能会错过将变量声明为 final(public 和 static 可以忽略,因为没有它会是编译错误),而它们隐含地用于接口。有任何支持/反对的论据吗?我想这可能之前已经详细讨论过,因为它看起来很初级,但是我的 google-fu 今天对我没有帮助:)。如果有人可以在这里发表意见或将我指向可能已经讨论过的地方,将不胜感激。

提前致谢!

编辑:这样定义的接口文件不会在其客户端的类层次结构中使用,而是纯粹用于容纳常量。

4

2 回答 2

0

我不认为在接口中定义常量是邪恶的。如果有的话,在公共类中实现常量接口是邪恶的。然而,这给我们留下了很多其他好的选择

  • 您可以扩展接口以添加更多常量
    • 例如,接口定义了众所周知的属性名称。然后,您可以拥有一个添加特定于您的实现的属性的子接口。
    • 常量类通常有一个私有构造函数,这使得子类化变得不可能。
  • 并非我实现的所有类都是(公共)API 的一部分。我认为内部类是否实现常量接口实际上并不重要。
  • 假设一个方法需要常量作为方法参数: myXmlProcessor.setProperty(XMLOptions.VALIDATING, true)
    • 你怎么知道从哪里得到常量?通常,有几个常量类,这会留下使用错误类的风险。
    • myXmlProcessor.setProperty(MyXMLProcessor.VALIDATING, true): 你​​道这是对的。
  • 如果您有一个类层次结构并且基类实现了常量接口,它们会自动可供子类使用。同样,犯错的空间更小。
于 2012-10-22T09:28:39.213 回答
0

如果使用后 Java 5 SDK,那么为什么不评估 Enums 而不是使用接口来定义公共静态常量。尽管如此,这种方法并没有错。

于 2012-10-22T09:51:46.910 回答