Java 从类文件实例化泛型参数化类型
因此,客户机将以以下方式创建一个类:Java 从类文件实例化泛型参数化类型,java,reflection,Java,Reflection,因此,客户机将以以下方式创建一个类: public class Tester implements Test<Type1, Type2, Type3> { @override public method1(...) ... } 公共类测试仪实现测试{ @凌驾 公共方法1(…) ... } 然后客户端将把.class文件(即Tester.class)传递给我们 然后,我们希望实例化客户机的类,并根据泛型使用的类型运行它们的method1。到目前为止,我有以下
public class Tester implements Test<Type1, Type2, Type3> {
@override
public method1(...)
...
}
公共类测试仪实现测试{
@凌驾
公共方法1(…)
...
}
然后客户端将把.class文件(即Tester.class)传递给我们
然后,我们希望实例化客户机的类,并根据泛型使用的类型运行它们的method1。到目前为止,我有以下代码,但我认为我没有走上正确的道路:
//tempClass = <ClassName>.class
Type[] genericTypes;
Type[] genericInterfaces = tempClass.getGenericInterfaces();
if(genericInterfaces[0] instanceof ParameterizedType){
genericTypes = ((ParameterizedType)genericInterfaces[0])
.getActualTypeArguments();
}
Class<Tester<genericTypes[0], genericTypes[1], genericTypes[2]>> classTest
= ( Class<Tester<genericTypes[0], genericTypes[1], genericTypes[2]>>) tempClass
Constuctor<...> = ... //get the constructor
//Create the new instance by calling .newInstance()
//tempClass=.class
类型[]泛型;
类型[]genericInterfaces=tempClass.getGenericInterfaces();
if(参数化类型的GenericInterface[0]实例){
genericTypes=((ParameterizedType)GenericInterface[0])
.getActualTypeArguments();
}
班级考试
=(类)临时类
构造函数=//获取构造函数
//通过调用.newInstance()创建新实例
但是eclipse在Class>行中给了我很多错误,所以我认为这不是正确的路径。我做错了什么?这里有几个问题 首先,这两个
Classname.class
都是固有的静态构造,甚至被称为classliteral。因此,在运行时不能提供类型名,这就是为什么Eclipse抱怨您这样做的尝试。要获取以类名作为字符串的Class
对象,可以使用Class.forName:
@SuppressWarnings
不管怎样,不要选这个班。相反,强制转换
newInstance
调用的结果。现在,关于运行正确的方法。。。现在您已经有了所需的全部信息,分为两部分:调用方法的对象和实现接口的类型参数。您将知道类的名称,即Tester
?是的,我们知道类的名称。抱歉,我们不知道(我们只知道“Tester.class”)。不过,我们应该知道接口
Class<?> tempClass = Class.forName("Tester");
if (B.isAssignableFrom(A)) {
// ...
}