4

我总是在考虑将常量放在哪里,例如:

public interface MyInterface {
...
    public static final String MY_CONST = "const";
...
}

或在以下课程中:

public class MyClass implements MyInterface {
...
    public static final String MY_CONST = "const";
...
}

定义常量的更好地方是什么?

4

5 回答 5

5

常量接口模式可能是不好的做法,但是将常量放在接口中并不会使它成为常量接口。因此,如果您的常量与接口级别相关(与该接口的所有客户端相关),请继续将常量放入接口中。没有错。

于 2012-05-27T18:14:20.577 回答
2

永远不要使用接口来定义常量。

有关详细说明,请参阅 Robert C. Martin 的书 Clean Code,甚至 Josh Bloch 的 Effective Java。在这些作品中详细讨论了这个主题。

主要原因是它们确实会使搜索常量值的人感到困惑。

例如,假设您有一个类 A 实现了具有大量常量的接口。然后,B 还扩展了该类:您也将所有常量委托给子类的命名空间。

这有点像使用大量静态导入,这也有损于可读性。

于 2012-05-27T18:11:29.090 回答
0

一个接口可以有很多实现。如果常量表示的值对所有实现都是通用的,在接口上下文中有意义,那么最好在接口中声明它们。

否则,如果值特定于某个类实现及其后代,最好将它们放在类中。

没有对错之分,只是上下文或多或少地被挪用了。

于 2012-05-27T18:14:14.293 回答
0

不使用接口的另一个原因:从接口导入的常量值嵌入在使用类中。导入关系消失。当接口常量获得不同的值时,编译器不一定会检测到并重新编译该类。

这有点令人难以置信,实际上是一个可修复的错误。

于 2012-05-27T18:19:26.460 回答
0

接口旨在定义合同而不是实现,我将常量视为实现的一部分,因为它们对业务逻辑具有一定的价值。

所以在 Class 中定义常量是有意义的。更好的解释和推理阅读这篇文章在接口或类中定义常量

于 2020-05-12T01:13:58.027 回答