我的代码遇到了问题:
public static <T> T createPOJOFrom(Class<T> clazz, Entity source){
T obj = null;
if (clazz.isPrimitive()){
Map<String,Object> props = source.getProperties();
Iterator<Map.Entry<String,Object>> it = props.entrySet().iterator();
Object prop = it.next();
obj = (T) prop; // FIXME this can be dangerous!
} else {
obj = createPOJOFrom(clazz, createMapFromEntity(source));
}
return obj;
}
问题 1:
问题是 clazz.isPrimitive
返回 false
因为我可以在调试控制台中看到 clazz = class java.lang.String
,现在我该如何检查 String
、Number
、Boolean
、List
和 Map
?
这段代码可能有什么问题?
问题2:
如果问题 1 得到解决,将 Object prop
分配给 T
的最安全方法是什么,例如,如果 T
是 >String
,那么它就是 String.valueOf
对吗?如果它的原语像 int
、long
、char
会怎样?
最佳答案
这是最终的外观:
public static <T> T createObjectFrom(Class<T> clazz, Entity source){
T obj = null;
Map<String,Object> props = source.getProperties();
Iterator<Map.Entry<String,Object>> it = props.entrySet().iterator();
if (props.size() > 1){
if (clazz == List.class){
throw new RuntimeException("Not yet implemented");
} else if (clazz == Map.class){
throw new RuntimeException("Not yet implemented");
} else {
obj = createPOJOFrom(clazz, createMapFromEntity(source));
}
} else if (props.size() == 1) {
Map.Entry<String,Object> entry = it.next();
Object value = entry.getValue();
if (clazz.isPrimitive()){
obj = (T) value;
} else if (clazz == String.class){
String prop = String.valueOf(value);
obj = (T) prop;
} else if (clazz == Number.class || clazz == Long.class || clazz == Integer.class){
Long prop = Long.valueOf(String.valueOf(value));
obj = (T) prop;
} else if (clazz == Boolean.class){
Boolean prop = Boolean.valueOf(String.valueOf(value));
obj = (T) prop;
}
} else {
// empty
}
return obj;
}
关于java - 检查 Class<T> 是否是原始类型以及它是否是 String、Number、Boolean、List 或 Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179268/