【问题标题】:Use of constants in Java classJava类中常量的使用
【发布时间】:2017-08-01 12:40:24
【问题描述】:

我有一个 Request 类,其中包含许多 final 而不是 final 字段。

它只用于一种类型的请求。 但服务, 它被发送到的地方, 需要一个代码来区分操作的类型。 我创建了一个常量,每次都会使用 Request 类进行初始化。 例如:

public class Request {

  @JsonProperty("const")
  private static final String CONSTANT = "field"

  @JsonProperty("data")
  private int data;

  public String getConstant() {
      return CONSTANT;
  }

  public int getData() {
      return this.data;
  }
}

我想过在构造函数内部初始化它或者显式使用操作码作为构造函数的参数, 尽管它永远不会改变。 它应该是静态最终的吗?

问题是, 在这种情况下,最佳做法是什么?

【问题讨论】:

  • 我认为当前的编码方式没有问题。 static final 会做你想要完成的事情
  • 最好将其定义为 public static final String CONSTANT = "field",然后在任何你可以引用 Request.CONSTANT 的地方。你不需要一个吸气剂。

标签: java coding-style constants


【解决方案1】:

静态和最终是两个完全不同的东西:

static 应该用于在特定类型 (class) 的所有实例 (objects) 之间共享的东西

将该字段声明为final 将确保该字段是一个常量并且不能更改。

在您的情况下,在所有实例之间共享变量没有问题,因此根据最佳实践将其声明为 static final 不会有问题。

【讨论】:

    【解决方案2】:

    对于此类字段,我更喜欢使用枚举常量并通过构造函数/生成器模式初始化常量字段。只为此类 CONSTANT 字段提供 Getter 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-21
      • 2011-02-21
      • 2016-02-29
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2012-05-24
      • 2013-05-17
      相关资源
      最近更新 更多