我有以下enum
:
enum ColumnType {
TEXT,
NUMERIC,
DATE
}
使用此enum
时,如果使用String
值,则需要能够指定日期格式DATE
。我该怎么办?
例如,在我的代码中,我想使用类似于以下内容的方法来调用方法:
foo(ColumnType.DATE("yyyyMMdd");
稍后,如果object.getColumnType.getDateFormat()
是ColumnType
,我将需要能够使用DATE
检索该值。这有可能吗?
到目前为止,我已经找到的文档提出了设置枚举值的方法,但是它们都展示了如何为所有枚举值(而不是单个枚举值)设置它。
我对枚举的理解是非常基本的,因此,如果措辞不正确,我深表歉意。谢谢!
编辑:
日期格式需要在运行时设置,因为用户将选择/输入日期格式字符串。
答案 0 :(得分:6)
你可以
enum ColumnType {
TEXT,
NUMERIC,
DATE_YYYYMMDD,
oher date format
}
但是,如果要使用任意格式,则需要一个类来包装这些格式
class ColumnTypeFormat {
ColumnType columnType;
String format;
}
foo(new ColumnTypeFormat(ColumnType.DATE, "yyyyMMdd"));
您可以将它们与通用界面结合在一起
interface ColumnType {
String getFormat();
Class getType();
}
enum SimpleColumnType implements ColumnType {
TEXT(String.class, "%s"),
NUMERIC(BigDecimal .class, "%f");
private Class type;
private String format;
SimpleColumnType(Class type, String format) {
this.type = type;
this.format = format;
}
@Override
public Class getType() { return type; }
@Override
public String getFormat() { return format; }
}
class DateColumnType implements ColumnType {
private final String format;
public DateColumnType(String format) {
this.format = format;
}
@Override
public Class getType() { return LocalDate.class; }
@Override
public String getFormat() { return format; }
}
这可以让您在enum
中有一些固定的,预先创建的类型,而且还可以通过一个公共界面动态地创建其他类型。
答案 1 :(得分:2)
您可以实现两个构造函数,并在必要时传递Date格式的掩码,但不能在运行时更改它:
public enum ColumnType {
TEXT,
NUMERIC,
DATE("yyyyMMdd");
private final String dateMask;
public String getDateMask() {
return dateMask;
}
ColumnType(String dateMask) {
this.dateMask = dateMask;
}
ColumnType() {
this.dateMask = null;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(ColumnType.DATE.getDateMask());
}
}
答案 2 :(得分:0)
现在,因为OP只希望动态传递dateFormat,因此以下代码更合适,
public static void main(String[] args) {
ColumnTypeValue columnTypeNumeric = new ColumnTypeValue(ColumnType.NUMERIC);
ColumnTypeValue columnTypeText = new ColumnTypeValue(ColumnType.TEXT);
ColumnTypeValue columnTypeDate = new ColumnTypeValue("yyyyMMdd");
}
public static class ColumnTypeValue {
ColumnType columnType;
String dateFormat;
public ColumnTypeValue(ColumnType columnType) {
this.columnType = columnType;
}
public ColumnTypeValue(String dateFormat) {
this.columnType = ColumnType.DATE;
this.dateFormat = dateFormat;
}
}
enum ColumnType {
TEXT, NUMERIC, DATE;
}