在Java中,是否可以实现一个将对象作为输入的函数,然后将该对象转换为指定为参数的类型?
我正在尝试为原始数据类型实现通用类型转换函数,但我不确切知道从哪里开始:
public static Object convertPrimitiveTypes(Object objectToConvert, String typeToConvertTo){
//Given an object that is a member of a primitive type, convert the object to TypeToConvertTo, and return the converted object
}
例如,convertPrimitiveTypes(true, "String")
将返回字符串"true"
,而convertPrimitiveTypes("10", "int")
将返回整数10.如果转换没有明确定义(例如,将布尔值转换为整数),然后该方法需要抛出异常,并终止该程序。
答案 0 :(得分:8)
我写的是
public static <T> T convertTo(Object o, Class<T> tClass) {
如果单调乏味可能。如果你不关心效率,你可以转换为String并通过反射使用“Class”.valueOf(String)。
public static void main(String... ignore) {
int i = convertTo("10", int.class);
String s = convertTo(true, String.class);
BigDecimal bd = convertTo(1.2345, BigDecimal.class);
System.out.println("i=" + i + ", s=" + s + ", bd=" + bd);
}
private static final Map<Class, Class> WRAPPER_MAP = new LinkedHashMap<Class, Class>();
static {
WRAPPER_MAP.put(boolean.class, Boolean.class);
WRAPPER_MAP.put(byte.class, Byte.class);
WRAPPER_MAP.put(char.class, Character.class);
WRAPPER_MAP.put(short.class, Short.class);
WRAPPER_MAP.put(int.class, Integer.class);
WRAPPER_MAP.put(float.class, Float.class);
WRAPPER_MAP.put(long.class, Long.class);
WRAPPER_MAP.put(double.class, Double.class);
}
public static <T> T convertTo(Object o, Class<T> tClass) {
if (o == null) return null;
String str = o.toString();
if (tClass == String.class) return (T) str;
Class wClass = WRAPPER_MAP.get(tClass);
if (wClass == null) wClass = tClass;
try {
try {
return (T) wClass.getMethod("valueOf", String.class).invoke(null, str);
} catch (NoSuchMethodException e) {
return (T) wClass.getConstructor(String.class).newInstance(str);
}
} catch (Exception e) {
throw new AssertionError(e);
}
}
打印
i=10, s=true, bd=1.2345