没有实例的最终常量类比常量接口更好?

时间:2011-12-30 08:12:17

标签: java class interface constants

在阅读常量接口反模式时,我发现没有实例的最终常量类比常量接口更好 请解释我怎么样?

public interface ConstIfc {
  public static final int constValue = 10;
}

public final class ConstClass {
  private ConstClass{}
  public static final int constValue = 10;
}

如果必须在没有命名Ifc / Class名称的UtilClass中使用constValue,我们可以实现/扩展它们。但实现支持多重继承。那么如何更好地延伸?
注意:我能理解静态导入。

3 个答案:

答案 0 :(得分:7)

我认为这个论点是你不需要扩展OR实现一个常量类或接口,因为我们有静态导入。因此,如果您要使用静态导入,那么为常量创建一个类更符合类实际的概念,而不是接口。并使其成为最后一堂课,消除了应用反模式的诱惑;也就是说,扩展或实现定义常量的类型。

在实践中,我不认为你使用哪种模式会产生太多差异。

答案 1 :(得分:3)

您应该考虑使用Enums而不是使用常量的类/接口。它更灵活,更强大,更强大。

答案 2 :(得分:1)

接口是一种抽象,为了保持抽象,它们不应包含实现细节(包括常量变量)。接口通常也用于描述公共API,其中实现细节不属于。因此,将常量数据放入类而不是接口是有意义的。

我不确定你的意思“如何更好地扩展?”,但我认为你应该避免继承/扩展这种实现细节到多个类。不正确地利用实现继承通常会导致设计不灵活。在您的示例中,final上的ConstClass关键字利用编译器阻止您执行此操作,这是接口无法实现的。