涉及幻数的全局常量的最佳实践

Bil*_*ory 9 java coding-style constants

为了避免幻数,我总是在代码中使用常量.回到过去,我们习惯在无方法接口中定义常量集,现在它已成为反模式.

我想知道最佳做法是什么?我在谈论全局常量.枚举是在Java中存储常量的最佳选择吗?

wil*_*ood 30

对于魔术数字,其中数字实际有意义,而不仅仅是一个标签,你显然不应该使用枚举.然后旧的风格仍然是最好的.

public static final int PAGE_SIZE = 300;
Run Code Online (Sandbox Code Playgroud)

当你只标记某些东西时,你会使用枚举.

enum Drink_Size
{
   TALL,
   GRANDE,
   VENTI;
}
Run Code Online (Sandbox Code Playgroud)

有时将所有全局常量放在自己的类中是有意义的,但我更喜欢将它们放在与它们最紧密相关的类中.这并不总是很容易确定,但在一天结束时,最重要的是你的代码工作:)


Mot*_*Mot 0

使用接口来存储常量是某种滥用接口的行为。

但使用枚举并不是适合每种情况的最佳方法。通常一个普通常数int或其他常数就足够了。定义自己的类实例(“类型安全枚举”)更加灵活,例如:

public abstract class MyConst {
  public static final MyConst FOO = new MyConst("foo") {
    public void doSomething() {
      ...
    }
  };

  public static final MyConst BAR = new MyConst("bar") {
    public void doSomething() {
      ...
    }
  };

  protected abstract void doSomething();

  private final String id;

  private MyConst(String id) {
    this.id = id;
  }

  public String toString() {
    return id;
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)