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;
}
...
}