簡體   English   中英

從已知類型實例化類

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

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