[英]JAVA: Cast String to (dynamically known) primitive type in order to instantiate a (dynamically known) class
[英]Instantiate class from known type
我有一個存儲類類型的數組。
然后按照與之關聯的順序實例化它們。
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);
調用Class.getDeclaredConstructor()
,必須將每個參數類型為Class<?>
的參數類型傳遞給它,以使反射可以精確地確定所要遵循的構造。
因此,您的第一次嘗試是在正確的軌道上,但是嘗試調用getDeclaredContructor()
傳遞給它的是數組而不是單個類:
Class.getDeclaredContructor(new Class<?>[]{viewHolderViewTypeStorage.getClassType()})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.