是否应将常量集合放在类或接口中?

2022-09-01 03:00:52

如果我有一个静态常量的集合,我想集中声明这些常量,以便如果将它们放在类或接口(Java)中,则可以在各个项目之间共享它们。

在过去,我看到它们大多放在一个类中,但我开始想,由于类不会也不应该被实例化,也许它们在接口中会更好,但话又说回来,接口不应该由任何类实现,例如

public class ErrorCodes {
    public static final String ERROR_1 = "-1";
    public static final String ERROR_2 = "-2";
}

public interface ErrorCodes {
    public static final String ERROR_1 = "-1";
    public static final String ERROR_2 = "-2";
}

答案 1

如果它们有很强的联系,那么我会把它们放在一个枚举中:

public enum Error {
  ERROR_1("-1", "foo went wrong"),
  ERROR_2("-2", "bar went wrong");

  private final String id;
  private final String message;

  Error(String id, String message) {
    this.id=id;
    this.message=message;
  }

  public String getId() {
    return id;
  }

  public String getMessage() {
    return message;
  }
}

优点是可以在代码中具有类型安全性,并且可以轻松添加基于 id 的查找(通过在构造函数中生成 a 或通过简单地循环)。HashMap<String,Error>values()


答案 2

有些人认为常量接口是一种反模式(http://en.wikipedia.org/wiki/Constant_interface)。