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

标签 java

我的代码遇到了问题:

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/

相关文章:

括号内与括号外的 Java 泛型方法参数类型

java - 带有包含搜索框和焦点问题的自定义标题的 CellTable

java - 日历实例的创建成本特别高

java - 无法执行 cd/usr/bin/java

java - 在 Eclipse 中的正确位置运行 servlet?

java - 如何在运行可执行 jar 时查找类

java - 如何在 ListView 中获取所选项目的值 - Android

java - 覆盖 : same onDraw for many Views (Button, TextView) 元素

java - 运行常见的 jBehave 故事

java - 使用 reactor netty 为 spring-webflux WebClient 配置 HostnameVerifier