簡體   English   中英

如何使用具有 generics 參數和返回類型方法的 java 中的反射來獲取 Class 的實例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM