Estoy estableciendo campos públicos del Object
this
a través de la reflexión. Tanto el nombre del campo como el valor se dan como String
. Utilizo varios tipos de campos: Boolean
, Integer
, Float
, Double
, enum
, y String
.Establecer campos con reflexión - La cadena no tiene valueOf (String) método
Funciona con todos ellos excepto con String
. La excepción que se lanza es que no existe ningún método con la firma String.valueOf(String)
... Ahora uso una solución instanceof
sucia para detectar si cada campo es una Cadena y en ese caso simplemente copie el valor en el campo.
private void setField(String field, String value) throws Exception {
Field wField = this.getClass().getField(field);
if(wField.get(this) instanceof String){ //TODO dirrrrty hack
//stupid workaround as java.lang.String.valueOf(java.lang.String) fails...
wField.set(this, value);
}else{
Method parseMethod = wField.getType().getMethod("valueOf", new Class[]{String.class});
wField.set(this, parseMethod.invoke(wField, value));
}
}
¿Alguna idea de cómo evitar esa solución?
¿Cree usted que java.lang.String
debería ser compatible con el método valueOf(String)
?
Gracias.
Vale la pena mencionar que todos estos Objetos (excepto las enumeraciones) tienen constructores de Cadenas unarios. Así que podrías cambiar a usar esos en todos los casos y solo usar 'valueOf' para tus enums, si eso parece de alguna manera más limpio. – jasonmp85