转换通过反射检索对象到字符串(如何迭代多个类类型?)



我有一个getterMethod,它返回一个类型,我使用:

getterMethod.getReturnType()

我需要将这个返回值强制转换为string。根据返回值的类型,我要么只需要在对象上使用.toString()方法,有时我需要做更多的工作,如使用字符串格式的日期等。

我忍不住要这样走:

Integer i = 1;
if(i.getClass().isInstance(getterMethod.getReturnType())){
    // integer to string
}

但是我有很多可能的类型,什么是一个好的和快速的方法来解决这个问题?

是否可以在类类型上使用切换盒块?

您可以简单地执行以下操作:

String objectCLassName = obj.class.getName();

这是泛型对象的类名字符串。

如果你的方法返回一个字符串,只需将它与这个比较。

例如

String returnType = getterMethod.getReturnType();
if (i.class.getName().equals(returnType)) {
    // Your code here
}

由于层次性和继承性,将保留一些冗长。

面向对象将是一个映射。

Class<?> clazz = getterMethod.getReturnType();

注意这里继承是残酷的:子类可能会返回父类中返回类型的派生类;两者都有相同签名的Getter方法

您可能需要处理Class。isPrimitive (Integer.classint.class)相对于从getter接收到的值。

还有Class.isArrayType

但是类型转换器的映射是可行的:

Map<Class<?>, Function<Object, String>> map;
Function<Object, String> converter;
do {
     converter = map.get(clazz);
     clazz = clazz.getSuperclass();
} while (converter == null && clazz != null;
String asText = converter == null
    ? String.valueOf(value)
    : converter.apply(value);

相关内容

  • 没有找到相关文章