我觉得每次我问这样的问题时,人们总是索要代码,但是当我发布代码时,就没有人再回复了,因为我猜代码太长了。所以这次我会尽量简短。
考虑一个扩展此类的适配器类,它提供扩展 RecyclerView 的功能:
public class MyAdapter extends ExpandableRecyclerViewAdapter<MyParentViewHolder, MyChildViewHolder> ...
但是,我通常有另一个单独的适配器类(我尝试自己制作),它提供向 RecyclerView 项目添加复选框/提供多重选择的功能。用法示例:
public class MyOtherAdapter extends CheckableAdapter<SomeType, SomeViewHolder> ...
该类(class)恰好足够短,可以发布,以防万一它是相关的:
public abstract class CheckableAdapter<T extends CheckableObject, VH extends CheckableViewHolder> extends RecyclerView.Adapter<VH> {
private List<T> list;
private boolean checkMode;
public CheckableAdapter(List<T> list) {
this.list = list;
this.checkMode = false;
}
@Override
public void onBindViewHolder(VH holder, int position) {
final CheckableObject checkableObject = list.get(position);
holder.checkBox.setOnCheckChangedListener( ... );
if (isCheckModeOn()) {
...
} else {
...
}
}
public boolean getCheckMode() { return checkMode; }
public void setCheckMode(boolean checkMode) { this.checkMode = checkMode; }
}
好吧,现在考虑一种情况,您需要同时扩展 ExpandableRecyclerViewAdapter 和 CheckableAdapter,但您不能在 Java 中扩展两个类。换句话说,您希望将这两个类的所有功能都带入您的类中。
解决此类案件的正确方法是什么?任何人都可以提供使用我在此处定义的类的示例吗?
最佳答案
我认为“正常”的答案是遵循众所周知的“更喜欢组合而不是继承”。意思是:不要使用继承来节省几行代码,只需将额外的功能放入专用类 X 和 Z 中,并让那些需要它的类创建 X 或 Z 的对象,并调用方法关于这些。
但事实是:你被“塞进”了 Android 编程模型中。我认为在这种情况下对您来说没有简单的解决方案。除非你找到办法
- 创建一个扩展适配器的“通用”基类
- 但是您可以提供多个对象,这些对象可用于向适配器方法“添加”行为
关于java - 绕过多重继承限制的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367673/