Tengo el siguiente enum
:
enum ColumnType {
TEXT,
NUMERIC,
DATE
}
Cuando se utiliza este enum
, tengo que ser capaz de especificar un formato de fecha String
si se utiliza el DATE
valor. ¿Como podría hacerlo?
Por ejemplo, en mi código Quiero llamar a un método que utiliza algo similar a esto:
foo(ColumnType.DATE("yyyyMMdd");
Más tarde tendría que ser capaz de recuperar ese valor usando object.getColumnType.getDateFormat()
si el ColumnType
es DATE
. ¿Es esto posible?
La documentación que he podido encontrar hasta ahora sugieren formas de establecer el valor de una enumeración, pero todos ellos muestran cómo configurarlo para todos los valores de enumeración, no individual.
Mi comprensión de las enumeraciones es bastante básico, así que me disculpo si esto no está redactado correctamente. ¡Gracias!
EDITAR:
Las necesidades de formato de fecha que se establezcan en tiempo de ejecución como el usuario va a seleccionar / introducir la cadena de formato de fecha.
Tu puedes hacer
enum ColumnType {
TEXT,
NUMERIC,
DATE_YYYYMMDD,
oher date format
}
Sin embargo, si usted quiere cualesquiera formatos que necesita una clase para envolver estos
class ColumnTypeFormat {
ColumnType columnType;
String format;
}
foo(new ColumnTypeFormat(ColumnType.DATE, "yyyyMMdd"));
Se pueden combinar estos con una interfaz común
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; }
}
Esto le permite tener algunos tipos fijos, pre-creados en el enum
, sino también crear otras adicionales sobre la marcha con una interfaz común.