![](/img/trans.png)
[英]Java Generics get the Type from the method (that creates object) using reflection
[英]How to get Instance of a Class using reflection in java having generics parameter and return type method?
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();
}
}
現在,當我嘗試使用反射創建 Class "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);
}
}
給我錯誤:線程“主”中的異常 java.lang.ClassCastException: [Ljava.lang.Object; 不能轉換為 [E;
有沒有辦法獲得一個 object 的 AC class 的實例,並將通用對象傳遞給它?
Java arrays 知道他們的組件類型。 所以你需要反射地創建數組。 試試下面的。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.