从已知类型实例化类

时间:2016-02-17 13:18:24

标签: java android

我有一个存储类类型的数组。

然后按照与之关联的顺序对它们进行实例化。

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);

1 个答案:

答案 0 :(得分:2)

当你致电Class.getDeclaredConstructor()时,你必须传递一个参数类型数组,每个参数类型都为Class<?>类型,以便反映精确定位你所追求的构造。

所以你的第一次尝试是在正确的轨道上,但尝试调用getDeclaredContructor()传递给它一个数组而不是一个类:
Class.getDeclaredContructor(new Class<?>[]{viewHolderViewTypeStorage.getClassType()})