11

この質問は、私のニーズがそのドメインに存在するという点で Android に関連していますが、質問は依然として Java 全体に適用されます。Activityここでは、FragmentActivity、 、 などの Android 用語を使用しListActivityます...

アプリケーション全体で使用する必要がある機能を含む抽象基本クラスを実装する必要があります。より具体的には、すべてActivityがこの機能を使用する必要がありますが、基本クラスによって自動的に処理されるようにしたいと考えています。私の問題は、アプリケーション内に 、ActivityFragmentActivityおよび などのさまざまな種類のアクティビティがありListActivity、それらはすべて拡張されていることですActivity(もちろんマイナスActivity)。

基本クラスのコードは の各実装でまったく同じでActivityあるため、コードの重複を回避し、各タイプの基本クラスを作成する必要があることを回避する方法はありActivityますか?

私が避けようとしているもの:

public abstract class BaseActivity extends Activity
{
    public void onCreate(Bundle savedBundle)
    {
        // code goes here, will be the exact same for all these base classes
    }
}

public abstract class BaseFragmentActivity extends FragmentActivity
{
    public void onCreate(Bundle savedBundle)
    {
        // code goes here, will be the exact same for all these base classes
    }
}

public abstract class BaseListActivity extends ListActivity
{
    public void onCreate(Bundle savedBundle)
    {
        // code goes here, will be the exact same for all these base classes
    }
}

public class MyMainActivity extends BaseActivity
{
}

public class MyUserList extends BaseListActivity
{
}

public class SomeActivityThatNeedsToBeAFragment extends BaseFragmentActivity
{
}

次のようなものを使用して、これにジェネリックを利用しようとしていました

public abstract class BaseActivity<T extends Activity> extends T

しかし、明らかにそれはうまくいきません。または多分私はそれを間違っているだけです。このコードの再利用を達成し、重複を回避する方法はありますか、それとも単にコードの複製に固執しているだけですか?

ありがとう!

4

2 に答える 2

3

多くの場合、フラグメントを使用すると、この種の問題に役立ちます。あなたの特定のケースでは、ListActivity も使用したいことがわかります。それはそれを難し​​くします

ご存知のように、Java はここでは役に立ちません。複数の実装 (List および MyBase) を継承することはできません。簡単な答えはありません。私は2つのことを提案することができます:

  • List(Activity,Fragment) は、基本クラスの非常に単純な拡張です。かなりの量の作業を行うことで、基本クラスから継承する独自のクラスを作成できます。それらはおそらくフレームワークのものよりも単純です。多分それは大丈夫でしょう。

  • デリゲート。共通の動作を実装するが、Activity/Fragment から継承しないクラスを作成します。Fragment/Activity クラスの初期化中に、これらのオブジェクトのいずれかを作成します。一般的な動作がある場合はいつでも、デリゲート インスタンスに委任します。

于 2013-03-12T04:37:54.550 に答える
0

という抽象クラスを作成しますBaseActivity。そのために実装onCreate()します。これは、アクティビティ操作の基本をカバーする必要があります。から拡張する他のクラスを作成しBaseActivityBaseActivity.

ここでの主なアイデアは、Activityあなたが持っているものや作成したものは、何らかの方法で互いに関連し、同様のコード操作を行うということです。特別な場合にのみ、何か特別なことをする必要があるため、オーバーライドしますonCreate()

于 2013-03-12T04:15:28.587 に答える