Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:解析方法&x27;s运行时的泛型类型_Java_Methods_Reflection_Static Methods_Reflections - Fatal编程技术网

Java:解析方法&x27;s运行时的泛型类型

Java:解析方法&x27;s运行时的泛型类型,java,methods,reflection,static-methods,reflections,Java,Methods,Reflection,Static Methods,Reflections,如何在运行时解析此方法的泛型类型 我的方法签名:static T get(字符串键) 方法必须保持静态。如下所示: (休眠代码) 公共类XXXDao{ 私有类实体类; 私有类getEntityClass(){ if(entityClass==null){ entityClass=(类)((ParameteredType)getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } 返回实体类; } ... } 在此处发布整个

如何在运行时解析此方法的泛型类型

我的方法签名:
static T get(字符串键)

方法必须保持静态。

如下所示: (休眠代码)

公共类XXXDao{
私有类实体类;
私有类getEntityClass(){
if(entityClass==null){
entityClass=(类)((ParameteredType)getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
返回实体类;
}
...
}

在此处发布整个代码块以获取帮助此代码相当于只返回
对象
,泛型在此处实际上什么都不做。我想问你为什么要这样做,目标是什么?@markspace重点是将其用作无样板文件的首选项或属性系统,例如,在这种情况下,我可以使用一种推断类型的布尔值:
if(Prefs.get(“isActive”)
或例如
int saveTime=Prefs.get(“saveTime”)
的目标是消除对
getOrDefault
方法的需要,而是计算
T
的默认值,而不需要直接参数
T
。Java无法根据返回类型解析方法。它只使用参数类型和方法名称,因此我认为您所设想的不会起作用。此示例解析类的泛型类型,并且由于
java.lang.ClassCastException而不起作用:java.lang.class不能转换为java.lang.reflect.ParameterizedType
无论如何,静态t get(字符串键)方法无法确定T类类型。如果需要,必须添加一个输入参数,如下所示:static T get(Class clazz,String key)
public class XXXDao<T> {

    private Class<T> entityClass;

    private Class<T> getEntityClass() {
        if (entityClass == null) {
            entityClass = (Class<T>) ((ParameterizedType) getClass()
                .getGenericSuperclass()).getActualTypeArguments()[0];
        }
        return entityClass;
    }
    ...
}