大家怎么看待 effective Java 接口只用于定义类型 这一个准则。

2020-04-07 20:53:04 +08:00
 bigbigeggs
4247 次点击
所在节点    Java
26 条回复
SoloCompany
2020-04-08 22:00:50 +08:00
@bigbigeggs #18 那句话的意思是说

不要使用没有任何实际意义的接口
比如 interface C { const X }, class A implements C { use(X) }

如果还是希望使用毫无意义的常量容器, 应该写成类 (concret 或 abstract 都无所谓)
比如 abstrace class C { const X }, import C.x; class A { use(X) }

而如果 C 本身是有意义的, 并且 X 和 C 的定义(contract) 紧密关联, 则并没有什么不妥
majiaxin110
2020-04-08 22:49:42 +08:00
@bigbigeggs 我认为应该考虑常量出现的场合分散放在合适的类里,尽可能使用枚举等,实在不行的话也是放在具体的类里而非接口。当然我觉得约定好了其实这个也没有大碍
EastLord
2020-04-09 16:06:27 +08:00
我认为常量应该定义在类中而不是接口中
BBCCBB
2020-05-23 15:30:45 +08:00
我就是定义在接口里的, 仅仅是不想写前面那坨 public static final 而已.

这个规则根据个人实际情况来.
BBCCBB
2020-05-23 15:31:22 +08:00
接口名后面加上 Constant, 这已经够明显了吧.
shupaiqianbi
2020-06-28 16:37:20 +08:00
这条的前提是 只定义常量的接口被子类实现了。
那么就有以下几种考虑:
1. 如果此接口被子类实现有什么不妥?
2. 如果没有子类去实现此接口,而是直接引用有什么不妥?

回答:
1. 如果被子类实现后,在以后扩展中为了二进制兼容性,不管以前使用的常量还有没有使用,此接口都需要一直实现。所以这种方式不妥。
2. 如果是引用的方式使用接口中的常量或者类定义常量,其实都不如引用枚举类。及时不使用枚举类,在语义上接口更容易让人混淆,不如类来的清晰。毕竟大家看到接口的第一印象就是有类去实现。

个人愚见,不认同的可以多多讨论。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX