枚举实例变量中的公共final

时间:2017-12-05 13:36:06

标签: java enums final public instance-variables

我想知道,如果让公众能够看到“枚举”中的最终数据字段,这是否是一种普遍接受的做法。实例,并使用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'这样的语法,但第一个选项更容易编码,冗余更少,而且扩展速度更快,后者更快#39 ; s很长时间用很多复制和粘贴代码... 由于两者的目的相同,为什么需要不同的命名约定?

1 个答案:

答案 0 :(得分:2)

虽然这个问题主要是基于意见的,但我会说以下内容:

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