【问题标题】:Interface Constants vs Class Constants variables [duplicate]接口常量与类常量变量[重复]
【发布时间】:2017-04-20 19:07:03
【问题描述】:

我想知道最有可能使用什么,是interface Constants 还是class Constants?

我有一个带有interface 的代码,如下所示:

public interface IConstantsVariableSupport {
     public String URL = "www.sample-me.com";
     public Integer LIMIT = 50;
}

这个interface 将支持所有需要其属性常量的class。而且我认为我可以在class 中使用常量,如下所示:

public class ConstantsVariableSupport {
     public final static String URL = "www.sample-me.com";
     public final static Integer LIMIT = 50;
}

所以我的问题是,当使用他们拥有的constants 支持其他类时,我会考虑什么方法。是使用interface 还是class?或者,如果可能的话,您能否建议一个最佳实践来处理常量值以便在整个程序中使用。仅供参考,我知道如何使用这两种方法,我只是想知道如何正确使用。

【问题讨论】:

  • 使用接口的一个好处是变量是隐式 public static final,所以它不必那么冗长。
  • 我明白了,所以我学到了新东西。谢谢。
  • 接口的另一个好处是一个类可以实现一个接口并且仍然继承另一个类或接口。这是一种流行的技巧,可以避免在引入 static imports 之前声明类。

标签: java class interface constants


【解决方案1】:

我一直喜欢选项 #2 - 将常量放入类中。选项 #1 可能会为您节省一些输入,因为您不需要明确指出您的类变量是 public static final(这是隐含的)。但是,想想接口实际上是什么 - it defines how you would interact with an object。因此,它的目的是关注行为。

【讨论】:

  • 其实没关系。它们中的任何一个都不仅仅是一个常量容器,想想一个类实际上是什么:A class is the blueprint from which individual objects are created.
【解决方案2】:

首先,永远不要创建一个类或接口来转储所有常量。我知道这很诱人,但 1 或 2 年后,该常量文件将变得非常混乱且难以阅读。相反,如果一个变量与一个类有非常密切的关系,最好将常量变量放在那个类中。以下是 Joshua Bloch 的建议:

如果常量与现有的类或接口密切相关,则应将它们添加到类或接口中。例如,所有装箱的数值基元类(如 Integer 和 Double)都导出 MIN_VALUE 和 MAX_VALUE 常量。如果最好将常量视为枚举类型的成员,则应使用枚举类型导出它们。否则,您应该使用不可实例化的实用程序类导出常量。

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多