【发布时间】: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