gpt4 book ai didi

java - 创建通用类型适配器类不起作用

转载 作者:行者123 更新时间:2023-12-01 08:50:53 25 4
gpt4 key购买 nike

我有 3 个不同的 ArrayList s 并且每个都有来自特定对象的数据:Type_A , Type_BType_C 。每一个都有一个字段private String name所以我将该字段移至 Type_General并制作了所有 3 种类型来扩展通用类型。

我想为每个项目列表使用一个适配器,我想它们是否都扩展相同的类型( Type_General )并且适配器使用 List<Type_General>我不必创建 3 个不同的适配器,每种类型一个。

但是当我尝试为 Type_A 实例化一个时,我感到很有趣我的 IDE ( Android Studio ) 中出现红线错误,因为它需要 List<Type_General>我通过了List<Type_A>

我的适配器类的代码:

class SuggestionsAdapter extends RecyclerView.Adapter<SuggestionsAdapter.ViewHolder> {

private List<Type_General> mDataset;
private EditProfileFragment.SuggestionsEditTextEnum editTextEnum;
private EditText editText;
private RecyclerView recyclerView;

class ViewHolder extends RecyclerView.ViewHolder {
TextView mTextView;
ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}

SuggestionsAdapter(List<Type_General> myDataset, EditProfileFragment.SuggestionsEditTextEnum editTextEnum,
EditText editText, RecyclerView recyclerView) {
mDataset = myDataset;
this.editTextEnum = editTextEnum;
this.editText = editText;
this.recyclerView = recyclerView;
}

@Override
public SuggestionsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.textview_with_rounded_corners, parent, false);

return new ViewHolder((TextView) v);
}

@Override
public void onBindViewHolder(final SuggestionsAdapter.ViewHolder holder, final int position) {
holder.mTextView.setText(capitalizeFirstLetter(mDataset.get(position).getName()));
holder.mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (editTextEnum) {
case Type_A:
recyclerView.setVisibility(View.GONE);
break;
case Type_B:
recyclerView.setVisibility(View.GONE);
break;
case Type_C:
recyclerView.setVisibility(View.GONE);
break;
}
}
});
}

public void addItem(Type_General item) {
mDataset.add(item);
}

public void addAllItems(List<Type_General> items) {
mDataset.clear();
mDataset.addAll(items);
}

@Override
public int getItemCount() {
return mDataset.size();
}

}

Type_General 开始,这不应该起作用吗?是 Type_A 的父类, Type_BType_C

最佳答案

Collection<ChildClass>无法转换为 Collection<ParentClass> 。这可能是编译器的限制。

但是,只要正确使用您的集合(我的意思是,使用 List::add 、 List::addAll 或其他任何东西,而不仅仅是简单分配 Collection<ChildClass> ),就不应该有任何问题。

如果你只是:

private final List<Type_General> mDataset = new ArrayList<>();

SuggestionsAdapter(List<? extends Type_General> myDataset, EditProfileFragment.SuggestionsEditTextEnum editTextEnum,
EditText editText, RecyclerView recyclerView) {
mDataset.addAll(myDataset);
}

不会有错误,不是吗?

编辑:

我忘了说:你可以通过声明List<? extends Type_General>来确保 Actor 阵容从一开始。

关于java - 创建通用类型适配器类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42415972/

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