Tengo una enumeración FooBar en la clase Clazz con falues FOO y BAR así:
class Clazz {
enum FooBar{
FOO,
BAR
}
}
Ahora me gustaría utilizar el getString()
método wicket para localizar los valores FOO
y BAR
. Lo mejor que puedo hacer es definir en el archivo i18n
Clazz.FooBar.FOO=foo
Clazz.FooBar.BAR=bar
y obtengo valores con este código
fooBar = FooBar.FOO;
getString("Clazz.FooBar." + fooBar.name());
He oído que esto se puede lograr sin Clazz.FooBar
agregar la cadena de consulta i18n, pero el método que se llamará sería diferente. ¿Como hacer esto?
Puede poner este método en su página / panel base:
public String getString(Enum<?> value) {
Class<?> enclosingClass = value.getClass().getEnclosingClass();
String key = (enclosingClass == null ? "" : enclosingClass.getSimpleName() + ".")
+ value.getClass().getSimpleName() + "." + value.name();
return getString(key);
}
Entonces puedes simplemente llamarlo con
getString(Clazz.FooBar.FOO);
y le devolverá lo que definió en el archivo de propiedades.
No le aconsejaré que almacene directamente nombres constantes de enumeración en el archivo de propiedades, la razón es simple, dos enumeraciones diferentes pueden contener el mismo nombre.
A continuación se muestra el código que se me ocurrió.
class Clazz {
enum FooBar {
//StrId are keys from property file e.g. below
FOO("com.abc.classz.foobar.FOO"), BAR("com.abc.classz.foobar.BAR");
private final String strId;
private FooBar(String id) {
this.strId = id;
}
// toString can also be used here I am just keen on having seperate
// method
public String getName() {
//Load Value for strId from properties file
return null;
}
}
}
Esto mantendrá su enumeración y su propósito i18n separados y claros.
Vea a continuación la muestra de clase Enum. Es posible que desee personalizarlo más según sus necesidades.
public enum FooBar {
foo("foobar.foo"),
bar("foobar.bar");
private String key;
ErrorCodeEnum(final String key) {
this.key = key;
}
public String toString() {
return key;
}
}
entonces puede hacer que el método toString devuelva la clave directamente para que pueda usar
getString(ErrorCodeEnum.ERROR1);
o puede anular el método toString directamente como se muestra a continuación
public enum FooBar {
foo, bar;
public String toString(){
return getClass().getName()+"."+name();
}
}
Simplemente podrías definir
FOO=foo
BAR=bar
en sus propiedades y acceda a ella por
getString(fooBar.name());
o me estoy perdiendo algún punto?
Me resulta difícil convertir una pieza de código a PHP desde Java. Busqué en Internet sobre el significado de cada línea de código escrita en mi ejemplo de código de Java, pero no encontré ninguno. Quiero ...
Tengo un Enum, que devuelve el género de gender char: public enum Gender {FEMALE ('F'), MALE ('M'); género de char privado; Género (char gender) {this.gender = gender; ...
En la literatura JDBC a menudo encuentro fragmentos como void databaseCall () {Connection con = null; Sentencia de declaración = intento nulo {con = getConnection (...); ...
Sabemos que el conjunto de cadenas de pasantes de Java se basa en el patrón de diseño Flyweight. También el objeto String es inmutable. ¿Es obligatorio que todos los objetos que usan el patrón Flyweight sean inmutables? . ...