STYLE 1
public interface Constants{
String FOO = "foo",
BAR = "bar",
... ;
}
样式2
public interface Constants{
String FOO = "foo";
String BAR = "bar";
...
}
我曾经在单个界面中声明所有常量。我遵循风格1,因为它更具可读性。我想知道除了可读性之外,这两种风格之间是否存在任何差异。这两种风格有关于性能的问题吗?
注意:我从未实现Constant
接口,而是访问了这些常量
Constants.FOO
。
示例:
public class Main{
public static void main(String[] args){
...
System.out.println(Constants.FOO);
...
}
}
哪个更好,为什么?
答案 0 :(得分:4)
我遵循风格1,因为它更具可读性。
考虑以下案例,
private static final String FOO1="foo1", FOO2="foo2", FOO3="foo3",BAR="bar"...//and so on
现在,这实际上是不可读的,而不是检查以下内容,
private static final String FOO1 ="foo1";
private static final String FOO2 ="foo2";
private static final String FOO3 ="foo3";//and so on
现在考虑上述代码的可读性,
constant FOO1 ="foo1";
constant FOO2 ="foo2";
constant FOO3 ="foo3";//and so on
和
constant FOO1 = "foo1", FOO2 = "foo2", FOO3 = "foo3";
在阅读第二篇文章时,您可能会错过FOO3
也是常数的点,而在第一种情况下,FOO3
不变的任何人都会非常注意到这一点。此外,在这两种情况下,内存或执行都没有区别。
如果您专门为常量创建interface
而不是使用interface
,那么它就是Java中的。{1}}。接口应包含一些实现类必须同意的合同。使用interface只包含常量令人不快。
答案 1 :(得分:2)
它们在编译的代码级别上完全相同。没有任何区别。但是,尽量避免这种模式。在解释为什么不鼓励它之前,已经给出了几个答案。
如果您不打算实现常量接口,那么至少将常量放在final
类中会更有意义。
答案 2 :(得分:2)
您根本不应在interface
中定义常量。 It is bad practice。而是在类中定义逻辑上合适的每个常量。
此外,此类常量应为static final
。这样,您只需要一个常量实例,而不是在整个代码中定义新实例,这会影响性能。
编辑:如注释中所述,根据定义,接口常量为static final
。但是,如果在适当的位置定义它们,则值得注意这一点作为提示。
答案 3 :(得分:1)
首先在其中声明其自己的类中的所有常量。不要将它们分组在一个界面中,这是一个糟糕的设计。
我想知道除了可读性之外,这两种风格之间是否存在任何差异。
除了可读性之外没有区别。
这两种风格有关于性能的问题吗?
没有。相同。编译为相同的字节代码。
哪个更好,为什么? 。
仅限可读性方面的最佳选择。同样,更喜欢最好的可读方式。我更喜欢第二个。