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> 中泛型的类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)