【问题标题】:Public final in enum's instance variables枚举实例变量中的公共 final
【发布时间】:2017-12-05 13:36:06
【问题描述】:

我想知道将“枚举”实例中的最终数据字段公开并使用 CONSTANT_CASE 命名它们是否是一种普遍接受的做法。 我知道这并不完全正确,但我经常使用枚举而不是最终类来简化代码。
一个例子,我用:

public enum PropertyType {

   STRING("string", String.class, "generico"),
   BOOLEAN("boolean", Boolean.class, "vero/falso"),
   NUMBER("number", Double.class, "numerico"),
   INTEGER("integer", Long.class, "intero");

   public final String JSON_TYPE;
   public final Class JAVA_TYPE;
   public final String DESCRIPTION;

   private PropertyType(String jsonType, Class javaType, String description) 
   {
       if (jsonType == null)
           throw new IllegalArgumentException("json type can't be null");

       if (javaType == null)
           throw new IllegalArgumentException("java type can't be null");

       this.JSON_TYPE = jsonType;
       this.JAVA_TYPE = javaType;
       this.DESCRIPTION = description;
   }
}

而不是

public class PropertyType {
    public static final class STRING {
        public static final String JSON_TYPE="string";
        public static final Class JAVA_TYPE=String.class;
        public static final String DESCRIPTION="generico";
    }

    ...
    ...

    private PropertyType() {}
}

这两个选项都允许您使用像“PropertyType.STRING.DESCRIPTION”这样的语法,但第一个更容易编码且冗余更少,而且扩展速度更快,而后者则需要大量复制和粘贴来编写代码。 .. 既然两者的目的是一样的,为什么需要不同的命名约定呢?

【问题讨论】:

  • 这两个例子在我看来都是错误的:以所有大写字母命名一个类(如您的PropertyType.STRING)同样是一种误导性的命名约定。 PropertyType.STRING.description() 怎么了?
  • @DanielPryden 关于类名的好点都是大写的......'PropertyType.STRING.description()'本身没有错,但在这里我使用枚举来“存储和组织”常量,所以我我在徘徊,为什么不回忆一下 CONSTANT_CASE 的感觉......就像'PropertyType.STRING_DESCRIPTION'......无论如何,这不是一个花费超过 60 秒的话题

标签: java enums final public instance-variables


【解决方案1】:

虽然这个问题主要是基于意见的,但我想说的是:

  1. 采用大写字段名称,仅用于静态常量
  2. 对于这种特殊情况,将这些对象变量设为私有并为它们添加常规的 getter 更符合逻辑。

【讨论】:

  • 同意。我还认为枚举对象应该是(深度)不可变的——否则你就是在自找麻烦——这样做,它们成员的不变性无论如何都会变得隐含。
  • @Michael 这就是为什么我认为编写公共实例变量没有任何区别的原因......也许我错过了一些东西
  • @Schizoping 这只是惯例。惯例是在公共字段上使用 getter,因为它更灵活,因此实际上不需要为非静态公共常量提供样式指南。你可以这样做,这不会错,但你问这是否是“普遍接受的做法”,而事实并非如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
相关资源
最近更新 更多