java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query

java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query,第1张

1、首先建议你不要传入到Object对象,既然你知道他们有共同的父类(假设名字叫A),那么你就应该传入到A对象。这样你就可以调用A的query方法

2、如果你一定要用Object对象,那么,你可以

if (xxx instanceof A) {

A a = (A) xxx;

// TODO

}

在上述TODO的位置写上你要执行的 *** 作,其实就是强制类型转换。至于这个条件不满足的时候怎么 *** 作,则是你要考虑的问题了。A表示你的父类,xxx表示你传入的参数名。

Type genType = clazzgetGenericSuperclass();

Type [] params = ((ParameterizedType) genType)getActualTypeArguments();

return (Class) params[0];

泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类型。但注意public class BookManager<Book是不能被反射的,因为擦拭法的缘故。只有在Superclass 或者成员变量(FieldgetGenericType())等有函数返回ParameterizedType的时候才能成功反射,

你要么搞个构造函数把参数类型传进去才行

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函数的返回类型即可。

希望能给你启示。

以上就是关于java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query全部的内容,包括:java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query、如何获得泛型的Class对象、如何反射获取List<T> 中泛型的类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存