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