类中的静态final字段与java

时间:2017-06-09 05:55:13

标签: java oop design-patterns

我需要在我的应用程序中创建100个或更多静态最终常量,我可以按照我的理解实现这两种方式:

  1. 创建简单的java class并在其中创建static final字段
  2. 创建一个接口,将所有变量放入其中,因为接口中的所有字段都是隐式static final
  3. 我在上面的方法中有这些问题:

    1. 哪一个是正确的方法来实现这个目标?
    2. 哪一个是内存有效的方法?
    3. 是否有任何设计模式可以实现这一目标?

5 个答案:

答案 0 :(得分:5)

您可以参考很多关于该主题的书籍。

我会引用一个好的:"有效的Java"

第19项:仅使用界面来定义类型

  

常量接口模式是接口的不良使用。那个   class在内部使用一些常量是一个实现细节。   实现常量接口会导致此实现细节   泄漏到类的导出API中。它并不重要   类实现常量接口的类的用户

你甚至可以检查JDK主要是常量声明的位置..

Math.PI 例如在Math类中声明,而不是在接口中声明

作为一个例外,您可以看到 java.io.ObjectStreamConstants 中的常量,但同时书籍可以提供帮助:

再次从有效的java:

  

Java平台库中有几个常量接口......

     

这些接口应该是   被视为异常,不应该被模仿。

答案 1 :(得分:0)

我认为,方便的方法是将它们放在一个地方,如果它们具有共同的性质。无论如何,它们应该按一些属性分组。您可以像这样为他们创建类:

public final class Consts {
    public static class GroupA {...}
    public static class GroupB {...}
    //and so on
}

使用组,这个类变得更易读,更易于管理。关于内存消耗,尝试使用常量的原语,因为它们不需要额外的元信息空间。

答案 2 :(得分:0)

我不会想到它们应该在接口或类中,而是更多关于常量及其含义。

我不建议将所有常量放在一个地方,以便将它们放在一起。例如,如果一个常量与一个类直接相关,那么就会把它放在那个类中。我已经使用了代码,其中所有常量都捆绑在一个类中,我不知道这是一个好方法。

答案 3 :(得分:0)

您是否考虑过使用ENUM,或者它不适合您的情况? 我认为,使用ENUM的方法可以为您提供一些优于常数的优势。

Why use Enums instead of Constants?

答案 4 :(得分:0)

您可以通过在接口类中声明字段来随意创建最终或静态约束,因此我想使用您的选项编号 2