public enum E{
E1,E2,E3
}
public class Service{
...
}
public interface A<RET>{
RET get();
}
public interface AI<RET,CONF> extends A<RET>{
void conf(CONF ...args);
}
public class AC implements AI<Service,E>{
public void conf(E ...args){
....
}
public Service get(){
return new Service();
}
}
现在,当我尝试使用反射来创建类"AC"的实例时,出现错误:
public Class MyReflectionAPI{
public Object getInstance(){
Class <? extends AI> aClass = (Class <? extends AI>) Class.forName("AC");
Constructor<? extends AI> aCon = aClass.getConstructor(null);
AI ai = aCon.newInstance((Object[]) null);
Class<?> typeArg = Class.forName("[L"+"E"+";");
Method valueOfTypeArg = typeArg.getMethod("valueOf", String.class);
Object obj[] = new Object[]{valueOfTypeArg.invoke(typeArg,"E1")};
ai.conf(obj);
}
}
给我错误: 线程"main"中的异常 java.lang.ClassCastException: [Ljava.lang.Object; 不能强制转换为 [E;
有没有办法获取AC类实例的对象,并传递给它的泛型对象?
Java 数组知道它们的组件类型。因此,您需要以反射方式创建数组。请尝试以下操作。
Class<?> typeE = Class.forName("E");
Object obj = Array.newInstance(typeE,1);
Array.set(obj,0,valueOfTypeArg.invoke(typeE,"E1"));
ai.conf((Object[])obj); // good reason to hate varargs