什么是在类或接口中声明常量的更好的地方?

时间:2012-05-27 18:09:15

标签: java constants

我总是想在哪里放置常量,如:

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

或者在以下课程中:

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

定义常量的最佳位置是什么?

5 个答案:

答案 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

相关问题