Ich habe ein java.lang.reflect.InvocationHandler
und ich brauche die Methode invoke()Wie von String in einem primitiven Typ oder Standard-Java-Wrapper-Typen konvertieren
ich einen Wert vom Typ habe zu implementieren java.lang.String
von meiner Ausarbeitung und ich brauche zu konvertieren Dieser Wert entspricht dem von der Methode erwarteten returnType (es kann ein Primitiv wie int, boolean, double oder Wrapper-Klassen wie Boolean, Integer, Double, Float usw. sein).
Beispiel:
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String computedValue = compute(...);
return convert(method.getReturnType(), computedValue);
}
private Object convert(Class<?> returnType, String stringValue) {
return ...; // what's the simplest way?
}
Ich erwarte nicht einfach eine automatische Konvertierung zwischen komplexen Objekten zu implementieren, aber ich erwarte, dass eine einfache Art und Weise von String zu dem Standard-Java-Typ zu konvertieren.
Ich habe (zu) gesehen viele Male Sachen wie diese, aber es scheint mir nicht angemessen:
public static Object toObject(Class clazz, String value) {
if(Boolean.class.isAssignableFrom(clazz)) return Boolean.parseBoolean(value);
if(Byte.class.isAssignableFrom(clazz)) return Byte.parseByte(value);
if(Short.class.isAssignableFrom(clazz)) return Short.parseShort(value);
if(Integer.class.isAssignableFrom(clazz)) return Integer.parseInteger(value);
if(Long.class.isAssignableFrom(clazz)) return Long.parseLong(value);
if(Float.class.isAssignableFrom(clazz)) return Float.parseFloat(value);
if(Double.class.isAssignableFrom(clazz)) return Double.parseDouble(value);
return value;
}
und der oben ist nicht einmal das Schlimmste, das ich sah, so weit :)
Hat jemand hier einen geheimen Trick?
Sagen Sie uns: 1. Warum Ihr erstes Beispiel nicht funktioniert, und 2. Was "nicht angemessen" bedeutet. –
1. Das erste Beispiel funktioniert nicht, weil in der Convert-Methode die Implementierung fehlt (was das Thema für diese Frage ist) 2. scheint nicht angemessen bedeutet, dass diese Implementierung meiner Meinung nach ziemlich hässlich ist die vielen Wenns, und ich nehme an, es gibt einen besseren Weg, diesen Job zu machen. –
Da das zweite Beispiel funktioniert * (aber es ist nur hässlich), http://codereview.stackexchange.com könnte eine bessere Option sein. – luiscubal