Interface Constants vs Class Constants variables
我想知道最可能使用的是什么,是interface Constants还是class Constants?
我有一个代码有一个这样的interface:
1 2 3 4
| public interface IConstantsVariableSupport {
public String URL ="www.sample-me.com";
public Integer LIMIT = 50;
} |
这个interface将支持所有需要其属性常量的class。我认为我可以在一个class中做,也可以用它中的常量这样做:
1 2 3 4
| public class ConstantsVariableSupport {
public final static String URL ="www.sample-me.com";
public final static Integer LIMIT = 50;
} |
号
所以我的问题是,当使用constants支持其他类时,我将考虑什么方法。它使用的是interface还是class?或者,如果可能的话,您能建议一个最佳实践来处理一个常量值,以便在整个程序中使用吗?仅供参考,我知道如何使用这两种方法,我只是想知道如何正确地进行。
- 使用接口的一个好处是变量是隐式的public static final,因此它不必过于冗长。
- 我明白了,所以我学到了一个新东西。谢谢。
- 接口的另一个好处是,类可以实现接口,并且仍然继承另一个类或接口。在引入静态导入之前,这是一个避免声明类的流行黑客。
首先,永远不要创建用于转储所有常量的单个类或接口。我知道这很有诱惑力,但是一两年后,这个固定的文件会变得非常混乱和不可读。相反,如果一个变量与一个类有非常密切的关系,那么最好将常量变量放在该类中。以下是Joshua Bloch的建议:
If the constants are strongly tied to an existing class or interface, you should add them to the class or interface. For example, all of the boxed numerical primitive classes, such as Integer and Double, export MIN_VALUE and MAX_VALUE constants. If the constants are best viewed as members of an enumerated type, you should export them with an enum type. Otherwise, you should export the constants with a noninstantiable utility class.
号
我一直喜欢选项2-将常量放入类中。选项1可能会为您节省一些输入,因为您不需要显式地指出类变量是public static final(它是隐含的)。然而,想想一个接口实际上是什么——它定义了你将如何与一个对象交互。因此,它的目的是关注行为。
- 其实没关系。它们中的任何一个都不只是一个常量容器,想想类实际上是什么:A class is the blueprint from which individual objects are created。