Class1s xx = new Class1s();
var inters = xxGetType()GetInterfaces();//获取所有继承的泛型类型
if (intersLength > 0)
{
var ts = inters[0]GetGenericArguments();//获取第一个泛型的形参类型数组
if (tsLength > 0)
{
var res = ts[0];//获取到Class1
//todo:后续代码
}
}
已知类型Class1,获取它的属性集合,你上面的代码已经有了。
有点要注意,在获取第一个泛型的形参类型那里,不用的类型继承的泛型接口也不同,例如,可能是IList、IList、Dictionary的,所以不一定是第一个泛型就可以获取出T。这里应该还是有根据实际情况做相应处理的过程。
另外,如果已知是List的话,有一个很简单的方法:
xxGetType()GetMethod("Find")ReturnType。就可以返回Class1的Type了,这种就很有针对性,专门针对List的T Find()函数设计。获得Find函数的返回类型即可。
希望能给你启示。
在父类的构造方法中,获取泛型的具体类型
import javalangreflectParameterizedType;
import javalangreflectType;
import comopensymphonyxwork2ModelDriven;
/
工具类直接返回ModelDriven的对象
/
public class ModelBaseAction<T> extends BaseAction implements ModelDriven<T> {
protected T model;
/
通过反射,获取泛型的具体类型并实例化这个类型
/
public ModelBaseAction() {
// 获取反射的类型
javalangreflectType cls = supergetClass()getGenericSuperclass();
if (cls instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) cls;
// 获取所有放到泛型里面的类型
Type[] tps = ptgetActualTypeArguments();
Systemerrprintln(tps[0]getTypeName());
try {
// 实例化这个泛型所代表的类对象
model = (T) ClassforName(tps[0]getTypeName())newInstance();
} catch (Exception e) {
throw new RuntimeException("没有默认构造方法", e);
}
}
}
@Override
public final T getModel() {
return model;
}
}
以上就是关于如何反射获取List<T> 中泛型的类型全部的内容,包括:如何反射获取List<T> 中泛型的类型、如何在运行时获取泛型的类型、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)