複数の継承を必要とするコードの適切な実装に概念的な問題がありますが、これは多くのオブジェクト指向言語では問題になりませんが、プロジェクトはAndroid用であるため、multipleのようなものはありませんextends
。
私はそのような単純な異なる基底クラスから派生し、活動の束を持ってActivity
、TabActivity
、ListActivity
、ExpandableListActivity
、などまた、私は私がに配置する必要があり、いくつかのコードの断片を持っているonStart
、onStop
、onSaveInstanceState
、onRestoreInstanceState
およびすべての活動で他の標準のイベントハンドラ。
すべてのアクティビティの単一の基本クラスがある場合、特別な中間派生クラスにコードを配置し、それを拡張するすべてのアクティビティを作成します。残念ながら、複数の基本クラスがあるため、これは当てはまりません。しかし、コードの同じ部分をいくつかの中間クラスに配置することは、進むべき道ではありません。
別のアプローチは、ヘルパーオブジェクトを作成し、上記のイベントのすべての呼び出しをヘルパーに委任することです。ただし、これにはヘルパーオブジェクトを含める必要があり、すべてのハンドラーをすべての中間クラスで再定義する必要があります。したがって、ここでの最初のアプローチに大きな違いはありません-まだ多くのコードの重複。
Windowsで同様の状況が発生した場合、基本クラス(Activity
Android のクラスに「対応する」)をサブクラス化し、適切なメッセージを(1か所で)トラップします。
このためにJava / Androidで何ができますか?Javaインストルメンテーション(実際の例もあります)などの興味深いツールがあることは知っていますが、私はJavaの第一人者ではありません。
他の適切な解決策を見逃した場合は、それらに言及してください。
更新:
Androidで同じ問題を解決することに興味がある人のために、簡単な回避策を見つけました。Applicationクラスが存在します。これは、とりわけインターフェイスActivityLifecycleCallbacksを提供します。すべてのアクティビティの重要なイベントをインターセプトし、重要なイベントに値を追加できるようにするために必要なことを正確に行います。このメソッドの唯一の欠点は、APIレベル14から使用できることです。多くの場合、これは十分ではありません(今日ではAPIレベル10のサポートが一般的な要件です)。
decordator pattern
ます。これは最後の手段であり、回避したいことを実際に示していますが、コードの重複です。他のアイデアを盛り込む人がいなければ、あなたの答えを受け入れます。「中間体」のコードを一般化するためにジェネリックを使用できますか?