我有一个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.class
和int.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);