【发布时间】:2015-12-20 01:54:50
【问题描述】:
根据 Effective Java 中的第 19 条,必须使用接口来仅表示一种类型。在这种情况下,接口将包含构成公共合约一部分的方法,这些方法由类(实现接口)公开给客户端
如果是这样,为什么接口首先支持字段?由于这些字段是隐含的公共、静态、最终的(因此是常量),为什么语言设计者支持拥有它们?如果它们不受支持,那么开发人员将总是使用 utils 类(带有私有构造函数)来定义这些常量。只能自动避免使用常量接口的反模式
我正在考虑了解在界面中支持常量的原因。作为与客户签订的合同的一部分,它们是否必不可少?
谢谢
【问题讨论】:
-
" 如果它们不受支持,那么开发人员总是会使用 utils 类(带有私有构造函数)来定义这些常量。” 这也很丑陋。
-
呃,因为Java早在本书出版之前就已经设计好了?而且因为 Effective Java 不是语言规范,只是一组质量参差不齐的建议?
-
@Tom,可能。但至少接口暴露的合约在某种意义上不会是脏的,并且包含不指示任何类型行为的常量。
-
许多好的问题会根据专家的经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。
-
语言结构几乎总是源于一些创造性的想法,然后在实践中进行测试。引入接口是为了消除多重继承。它们看起来像代数类型,并且这些类型通常具有区分常量,例如 HOR/VERT、R/G/B、MAX:STACK_SIZE(最好是类型参数)。因此,开始 没有 常量需要一个尚未可能的洞察力,如果没有它们,该接口可能会做得更好。