【问题标题】:Use Interface for declaring Constants or a Class [duplicate]使用接口声明常量或类 [重复]
【发布时间】:2014-02-03 02:58:25
【问题描述】:

我使用接口来声明常量,因为它们是 public static final。很多时候我看到人们用公共静态最终常量变量编写一个类,有时我也这样做了。哪个是更好的实现方式,接口还是使用类?

public class MyCodeConstants {
    public static final String VALUE_1 = "VALUE1";
    public static final String VALUE_2= "VALUE2";
}

public interface MyCodeConstants {
    public static final String VALUE_1 = "VALUE1";
    public static final String VALUE_2= "VALUE2";
}

使用哪种方法更好?为什么?

【问题讨论】:

  • 为什么要在接口中定义常量?似乎在界面中将系统的机制暴露为不必要的细节。
  • 真的希望客户端实现该接口吗?使用interface 作为执行public static final 的副作用并不是一个足够好的理由。 (真的,使用enum
  • @T McKeown 我想知道哪个是更好的做法以及这样做的原因。即使我会在课堂上制作常量,这与“将系统机制暴露为不必要的细节”不同。
  • 如果这个类的 only 目的是让客户端使用常量,而你真的不想要类(或子类)的任何对象,请将其设为public final class 并添加一个 private 无参数构造函数,这样任何人都不会无意中扩展、实现或实例化该类。
  • @mattingly890 请仔细阅读问题,如果您不喜欢或不喜欢我可以删除的问题:)

标签: java android


【解决方案1】:

就设计而言,两者都很糟糕。一个类应该在你的软件中有方法,以尊重类的定义和封装原则。接口用于指示类的类似行为,不应用于存储常量。但是,一个好的解决方案是创建一个名为 Value 的新类。您可以在此处找到更多详细信息:

Should a collection of constants be placed in a class or interface?

【讨论】:

  • 非常感谢您的回答
  • 答案对我来说是可行的,并解释了我需要了解的内容
【解决方案2】:

首先,只有当常量确实需要成为公共 API 的一部分时,才应该以这种方式指定常量,并且您应该始终考虑枚举是否更有意义。

但是,如果拥有公共常量(Android 的意图名称、HTTP 状态代码)确实有意义,那么它们应该使用它们所属的类型。在 HTTP 状态代码的情况下,它们与 HttpServletResponse 最密切相关,这是一个接口,因此它们会去那里。如果常量与一个类相关联(从该类中提取接口并不是更好的设计),它们应该放在那里。

【讨论】:

  • 非常感谢您的回答,回答对我很有帮助!!
猜你喜欢
  • 1970-01-01
  • 2011-04-24
  • 2011-07-08
  • 2012-05-17
  • 1970-01-01
  • 2017-04-20
  • 2016-11-28
  • 1970-01-01
  • 2013-12-30
相关资源
最近更新 更多