【问题标题】:Best Practice to define constant - inside class or inside interface? [closed]定义常量的最佳实践——在类内部还是在接口内部? [关闭]
【发布时间】:2014-11-07 10:52:52
【问题描述】:

我有一个只有常量的类。代码 sn-ps 是:

public class CommonConstant
{

    public static final String  DAY                 = "DAY";
    public static final String  WEEK                = "WEEK";
    public static final String  MONTH               = "MONTH";
    public static final String  YEAR                = "YEAR";
    public static final String  ACCEPTED            = "accepted";
    public static final String  REJECTED            = "rejected";
    public static final String  ADDED               = "added";
    public static final String  MODIFIED            = "modified";

}

在类文件中指定常量是好习惯还是应该在接口中? 什么是好的做法?

【问题讨论】:

  • 可能在枚举中!
  • 看看这个问题,我想这正是你想要的:stackoverflow.com/questions/1372991/…
  • 一个接口为任意类定义了所需的行为——如果常量与所需的接口行为相关,就把常量放在那里!

标签: java class interface constants


【解决方案1】:

由于常量涉及实现,因此您应该将它们放入具有私有构造函数的类中,或者将它们放入枚举中。 Joshua Bloch 在 Effective Java 第 2 版中不鼓励使用“常量接口”。

Bloch 说接口应该只用于定义类型,并且当一个类实现一个接口时,这个接口用作引用实例的类型——将接口用于任何其他目的是不合适的。如前所述,常量就是实现

还有更多关于常量接口的内容

如果在未来的版本中,该类被修改为不再需要 要使用常量,它仍然必须实现接口以确保 二进制兼容性。如果一个非final类实现了一个常量 接口,它的所有子类的命名空间都会被污染 通过接口中的常量

BlocHquoted :)

HTH,卡罗

【讨论】:

  • 当您引用有效的 java 时,指出不鼓励使用接口的项目会很有用
  • 布洛赫不鼓励这样做,因为...
【解决方案2】:

What is a good practice

这其实是个好习惯

public enum EnumTest {
    DAY("DAY"), WEEK("WEEK"), MONTH("MONTH"), YEAR("YEAR");

    private String value;

    private EnumTest(String s) {
        value = s;
    }

    public String getValue() {
        return value;
    }

}

然后在别的地方

System.out.println(EnumTest.DAY.getValue()); // give you the value

for(EnumTest e :EnumTest.values()){ //values return an array of enum values
    System.out.println(e);
}

【讨论】:

  • 修饰符 private 对于枚举构造函数是多余的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 2013-02-16
  • 2013-11-18
  • 2018-05-24
  • 2015-01-26
  • 2013-08-03
  • 1970-01-01
相关资源
最近更新 更多