gpt4 book ai didi

java - 检查 Class 是否是原始类型以及它是否是 String、Number、Boolean、List 或 Map?

转载 作者:行者123 更新时间:2023-12-02 14:37:02 24 4
gpt4 key购买 nike

我的代码遇到了问题:

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,现在我该如何检查 StringNumberBooleanListMap

这段代码可能有什么问题?

问题2:

如果问题 1 得到解决,将 Object prop 分配给 T 的最安全方法是什么,例如,如果 T >String,那么它就是 String.valueOf 对吗?如果它的原语像 intlongchar 会怎样?

最佳答案

这是最终的外观:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com