2012-05-27 44 views
4

总是我想在那里把常数,在这样的接口:在类或接口中声明常量的更好的地方是什么?

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

或者像类:

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

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

+1

类。在有效的Java中讨论。 –

+0

为什么要上课?你能解释一下吗? – Jdoe

+2

http://stackoverflow.com/a/66307/139010和http://stackoverflow.com/questions/2659593/what-is-the-use-of-interface-constants –

回答

5

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

2

切勿使用接口来定义常量。

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

主要原因是他们可以真正混淆搜寻常量值的人。

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

这有点像使用大量的静态导入,这也违反了可读性。

0

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

否则,如果这些值是特定于某个类的实现及其后代,将会更好地将它们放入类中。

没有正确或错误,但上下文或多或少被占用。

0

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

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

+0

您正在讨论编译时常量,它与接口无关。这是一个普遍的事情。 –

相关问题