2016-02-17 90 views
0

我有一個存儲類的類型的數組。已知類型的實例化類

然後這些按與其相關的順序實例化。

public static class ViewHolderViewTypeStorage { 
     private int layout; 
     private Class<? extends BaseViewHolder> classType; 
     public ViewHolderViewTypeStorage(int layout, Class<? extends BaseViewHolder> classType) { 
      this.layout = layout; 
      this.classType = classType; 
     } 

     public int getLayout() { 
      return layout; 
     } 

     public Class<? extends BaseViewHolder> getClassType() { 
      return classType; 
     } 
    } 

然後,他們被要求

ViewHolderViewTypeStorage viewHolderViewTypeStorage = viewHolderViewTypeStorageMap.get(viewType); 
View newViewGroup = LayoutInflater.from(parent.getContext()).inflate(viewHolderViewTypeStorageMap.get(viewType).getLayout(), parent, false); 

//The problem code 
return viewHolderViewTypeStorage.getClassType().getDeclaredConstructor(viewHolderViewTypeStorage.getClassType()).newInstance(newViewGroup); 

我的問題是,是,它不工作。我得到以下錯誤:

<init> [class my.app.mainui.ViewHolderLatestChangeTask] 

我也試圖與

viewHolderViewTypeStorage.getClassType().getDeclaredConstructor().newInstance(newViewGroup); 

錯誤消息被

<init> [] 

任何想法,我又立刻陷入:-S

繼承人的解。

return viewHolderViewTypeStorage.getClassType().getDeclaredConstructor(new Class<?>[]{View.class}).newInstance(newViewGroup); 

回答

2

當調用Class.getDeclaredConstructor()你要傳遞給它的每個Class<?>類型的參數類型的數組,以便反射查明確切constructur你是後。

所以,你的第一次嘗試是在一個正確的軌道,但嘗試調用getDeclaredContructor()傳遞給它一個數組,而不是單一類:
Class.getDeclaredContructor(new Class<?>[]{viewHolderViewTypeStorage.getClassType()})

+0

感謝這麼多,它的工作原理。 –