Tak jak w temacie; moje rozwiązanie nie jest najefektywniejsze, ale działa. Działa za wyjątkiem sytuacji, gdy jako argument 'to' podamy obiekt reprezentujący klasę typu podstawowego. Można to oczywiście zrobić dodając kolejne porównania,
... else if (to.getName().equalsIgnoreCase("int")) {
return Integer.decode(from);
ale chyba jest jakiś prostszy/efektywny sposób na 'spakowanie' typu podstawowego w wersję obiektową??
private Object convertValue(String from, Class<?> to) {
try {
if (to.getName().equalsIgnoreCase(Boolean.class.getName())) {
return Boolean.valueOf(from);
} else if (to.getName().equalsIgnoreCase(Byte.class.getName())) {
return Byte.decode(from);
} else if (to.getName().equalsIgnoreCase(Short.class.getName())) {
return Short.decode(from);
} else if (to.getName().equalsIgnoreCase(Integer.class.getName())) {
return Integer.decode(from);
} else if (to.getName().equalsIgnoreCase(Long.class.getName())) {
return Long.decode(from);
} else if (to.getName().equalsIgnoreCase(Character.class.getName())) {
return new Character(from.charAt(0));
} else if (to.getName().equalsIgnoreCase(Float.class.getName())) {
return new Float(Float.parseFloat(from));
} else if (to.getName().equalsIgnoreCase(Double.class.getName())) {
return new Double(Double.parseDouble(from));
} else if (to.getName().equalsIgnoreCase(String.class.getName())) {
return from;
}
} catch (Exception ex) {
System.err.println(String.format("Nie można przekonwertować wartości '%s' na typ '%s'.", from, to.getSimpleName()));
return null;
//throw new RuntimeException(ex);
}
return null;
}