没有实例的final常量类如何优于常量接口



在阅读常量接口反模式时,我发现没有实例的final常量类比常量接口好。
请告诉我怎么做?

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

如果constValue必须在UtilClass中使用而不需要命名Ifc/Class名,我们可以实现/扩展那些。但是实现支持多重继承。那么如何更好地扩展呢?
注意:我能理解静态导入

我认为理由是您不需要扩展或实现一个常量类或接口,现在我们有了静态导入。因此,如果您打算使用静态导入,那么为常量设置一个类,比为接口定义一个类更符合类的实际含义。使它成为最终类消除了应用反模式的诱惑;也就是说,扩展或实现定义常量的类型。

在实践中,我认为你使用哪种模式没有太大的区别。

你应该考虑使用枚举而不是带有常量的类/接口。

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

我不知道你说的"how extends better "是什么意思?,但我认为您应该避免将这种实现细节继承/扩展到多个类中。不恰当地利用实现继承通常会导致不灵活的设计。在您的示例中,ConstClass上的final关键字利用编译器来防止您这样做,这对于接口是不可能的。

最新更新