私はこれらの質問をするたびに気分がいいです。人々は常にコードを要求しますが、コードを投稿するとコードが長すぎると思いますので誰も返信しません。だから私は今回は簡潔にしようとします。マルチ継承の制限を回避する正しい方法は何ですか?
RecyclerViewsを拡大するための機能を提供し、このクラス、拡張アダプタクラス考えてみましょう:私は通常、別の、独立したアダプタクラス(私は自分自身を作ってみましたという)にチェックボックスを追加するための機能を提供することがありますが
public class MyAdapter extends ExpandableRecyclerViewAdapter<MyParentViewHolder, MyChildViewHolder> ...
をRecyclerアイテムの表示/複数選択の提供。使用例:
クラスは、それはrelelvantです念のため、投稿するために十分に短いことを起こるpublic class MyOtherAdapter extends CheckableAdapter<SomeType, SomeViewHolder> ...
:
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では2つのクラスを拡張することはできません。言い換えれば、両方のクラスのすべての機能がクラスに持ち込まれることを望みます。
このようなケースを解決する正しい方法は何ですか?誰でも私がここで定義したクラスを使用した例を提供できますか?
継承の代わりに合成を使用することを検討してください。 – bradimus
上記のクラス定義を使用した例を提供できますか? – user7086932