我有以下内容enum:
enum ColumnType {
TEXT,
NUMERIC,
DATE
}
Run Code Online (Sandbox Code Playgroud)
使用this时enum,String如果使用该DATE值,则需要能够指定日期格式。我该怎么做?
例如,在我的代码中,我想使用类似于以下内容的方法来调用方法:
foo(ColumnType.DATE("yyyyMMdd");
Run Code Online (Sandbox Code Playgroud)
后来我需要能够检索使用该值object.getColumnType.getDateFormat()如果ColumnType是DATE。这有可能吗?
到目前为止,我已经找到的文档提供了设置枚举值的方法,但是它们都展示了如何为所有枚举值(而不是单个枚举)设置它。
我对枚举的理解是非常基本的,因此,如果措辞不正确,我深表歉意。谢谢!
编辑:
日期格式需要在运行时设置,因为用户将选择/输入日期格式字符串。
你可以做
enum ColumnType {
TEXT,
NUMERIC,
DATE_YYYYMMDD,
oher date format
}
Run Code Online (Sandbox Code Playgroud)
但是,如果要使用任意格式,则需要一个类来包装这些格式
class ColumnTypeFormat {
ColumnType columnType;
String format;
}
foo(new ColumnTypeFormat(ColumnType.DATE, "yyyyMMdd"));
Run Code Online (Sandbox Code Playgroud)
您可以将它们与通用界面结合使用
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; }
}
Run Code Online (Sandbox Code Playgroud)
这样一来,您可以在中添加一些固定的,预先创建的类型,enum还可以使用一个通用的界面动态创建其他类型。