我有一个存储类类型的数组。
然后按照与之关联的顺序对它们进行实例化。
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);
答案 0 :(得分:2)
当你致电Class.getDeclaredConstructor()
时,你必须传递一个参数类型数组,每个参数类型都为Class<?>
类型,以便反映精确定位你所追求的构造。
所以你的第一次尝试是在正确的轨道上,但尝试调用getDeclaredContructor()
传递给它一个数组而不是一个类:
Class.getDeclaredContructor(new Class<?>[]{viewHolderViewTypeStorage.getClassType()})