gpt4 book ai didi

java - 从已知类型实例化类

转载 作者:行者123 更新时间:2023-12-02 03:55:51 27 4
gpt4 key购买 nike

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

然后按照关联的顺序实例化它们。

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()})

关于java - 从已知类型实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35457850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com