我总是想在哪里放置常量,如:
public interface MyInterface {
...
public static final String MY_CONST = "const";
...
}
或者在以下课程中:
public class MyClass implements MyInterface {
...
public static final String MY_CONST = "const";
...
}
定义常量的最佳位置是什么?
答案 0 :(得分:5)
常量接口模式可能是不好的做法,但在接口中放置常量不会使其成为常量接口。因此,如果您的常量在接口级别相关(与该接口的所有客户端相关),请继续将常量放入接口。没错。
答案 1 :(得分:2)
永远不要使用接口来定义常量。
有关详细说明,请参阅Robert C. Martin的书“清洁代码”,或者甚至是Josh Bloch的Effective Java。这些主题将在这些工作中详细讨论。
主要原因是他们真的会混淆搜索常数值的人。
,例如,假设您有一个A类,它实现了大量常量的接口。然后,B还扩展了该类:您也将所有常量委托给子类的命名空间。
这有点像使用大量静态导入,这也违反了可读性。
答案 2 :(得分:0)
接口可以有很多实现。 如果常量表示的值对于所有实现都是通用的,在接口上下文中有意义,那么在接口中声明它们会更好。
否则,如果值特定于某些类实现及其后代,则最好将它们放在类中。
没有对错,但背景或多或少是适当的。
答案 3 :(得分:0)
不使用接口的另一个原因:从接口导入的常量值嵌入在using类中。导入关系消失了。当接口常量获得不同的值时,编译器不一定会检测到该值,并重新编译该类。
这有点令人难以置信,实际上是一个可修复的错误。
答案 4 :(得分:0)
接口用于定义合同而不是实现,我将常量视为实现的一部分,因为它们对业务逻辑具有一定的价值。
因此在类中定义常量是有意义的。更好的解释和推理方法,请阅读本文Define Constants in Interface or Class