У меня есть java.lang.reflect.InvocationHandler
, и мне нужно реализовать метод invoke()
У меня есть значение типа java.lang.String
из моей разработки, и мне нужно преобразовать это значение в соответствующий метод returnType, ожидаемый методом (он может быть примитивным, например, int, boolean, double или wrapper classes типа Boolean, Integer, Double, Float и т.д.).
Пример:
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 the simplest way?
}
Я не ожидаю просто реализовать автоматическое преобразование между сложными объектами, но я ожидаю простой способ преобразования из String в стандартные типы java.
Я тоже много раз видел такие вещи, но мне это не кажется нужным:
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;
}
и выше не хуже того, что я видел до сих пор:)
Есть ли у кого-нибудь секретный трюк?