2017-12-11 15 views
0

こんにちは、私は、「アクティビティ」、「サービス」とAndroidで「FragmentActivity」のサブクラス化を必要とするかなり複雑なアプリケーションを持っている(しかし、この質問は同様に、純粋なJavaでまだ有効である)異なるクラス間でコードを共有するには?

enter image description here

3の各クラスは、 "My Layer"内の一連のユーティリティで拡張されます。 Toastや特定の方法で構成を処理したり、ディスク上のファイルを読み取ったりする特定の方法。

今、私は共通のインターフェイス(MyUtilities)をすべての3種類のクラスに対して作成しました。

public class MyActivity extends Activity implements MyUtilities 
    public class MyFragmentActivity extends FragmentActivity implements MyUtilities 
    public class MyService extends Service implements MyUtilities 


    public class MyActivity1 extends MyActivity 
    public class MyFragmentActivity1 extends MyFragmentActivity 
    public class MyService1 extends MyService 

しかし、これにより、インターフェイスでフィールドとメソッドを定義することができないため、3つのすべてのクラスの共通メソッドをコピーして貼り付けることになります。それを行う良い方法はありますか?コードをコピーすると、長期的にエラーが発生しやすくなります。

私は抽象クラスを見ましたが、この場合にどのように使用するかはわかりません。理想的には私はそれが明らかに許可されていませんが、私の問題を解決することになる

public class MyActivity extends Activity, MyUtilities 

のような「二重延長」に必要なもの。

アイデアをお願いしますか?

ありがとうございます!

PS:私はすでに要求され、here'a簡単な例として

可能な限り共通クラスの静的メソッドを使用しています。 3つのオブジェクトの各コンフィギュレーション・フィールドをサポートできるようにする必要があり、それぞれがインターフェイスに行く次

private Configuration config 

public Configuration getConfiguration(){return config;} 

public void setConfiguration(Configuration cfg){this.config=cfg;} 

が方法が存在することを要求するのに役立ちますが、私はまだコピーする必要があるとペーストコードIドン含まれてい本当に好きです。

+0

もっとコードを共有してください。答えは、分離されたクラスのメソッドで論理を抽出することです。しかし、より良い助けをあなたのコードを共有するために。 – Ele

+0

ありがとう、私はメインテキストの簡単な例を追加しました – Lele

答えて

0

は、このアプローチを見てみましょう:

アイデアは意志がActivityを拡張し、MyUtilitiesインタフェースを実装して、あなたのCustom Activityクラスを作成することです。このようにして、Androidレイヤーはカスタムクラスをアクティビティー、レイヤーをMyActivity、そしてMyUtilitiesとして認識します。

public class CustomActivity extends Activity implements MyUtilities { 
    private Configuration config 

    public Configuration getConfiguration(){return config;} 

    public void setConfiguration(Configuration cfg){this.config=cfg;} 
} 

AndroidのレイヤはActivityとして、クラスMyActivityのインスタンスを理解するだろう。

層では、MyActivityのインスタンスがCustomActivityとMyUtilitiesとして認識されます。

public class MyActivity extends CustomActivity { 

} 

これは役に立ちます。

+0

ありがとう、私はそれを行う際に問題は私が同じようにしようとするときです。この場合、CustomActivityを拡張できないサービス。それとも私は何かを見逃していますか? – Lele

+0

多分あなたはデコレータパターンを試すことができますか? –

関連する問題