如何反射获取List<T> 中泛型的类型

如何反射获取List<T> 中泛型的类型,第1张

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> 中泛型的类型、如何在运行时获取泛型的类型、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9726151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存