2017-08-17 17 views
0

私はVolleyを呼び出し、onResponseをオーバーライドしたクラスを使用する2つのクラスを持っています。 2つの行を除いて、onReponseではまったく同じコードがあります。基本的に応答のスーパーを呼び出すのにまだ余分な2行を実行する最良の方法は何ですか?クラスBのための同じAndroid Volley抽象的なonResponse

Class A { 
    .... 
    Uploader uploader = new Uploader(); 
    uploader.startUpload(context, path, data); 

    // I know this can't be done but showing what I want 
    uploader.onResponse(String response) { 
     super(response); 
     ... 
     call to extra code 
    } 
} 

が、余分なコードは、あなたが抽象クラスを抽出でき

public class Uploader implements Response.Listener<String> { 
    public Uploader() { } 

    public void upLoad(final Context context, String path, String data) { 
     .... build request and then make call to start request 
    } 

    @Override 
    public void onResponse(String response) { 
     ... Doing something common for both A and B Classes 
    } 
} 

答えて

1

異なっている:ここで私が何を意味するかである

abstract class MyReponseListener implements Response.Listener<String> { 

    @Override 
    public void onResponse(String response) { 
     //the two lines of common code you want 
    } 
} 

をし、あなたのUploaderがあなたを拡張します抽象的MyResponseListener

class Uploader extends MyResponseListener { 
    public Uploader() { } 

    public void upLoad(final Context context, String path, String data) { 

    } 

    @Override 
    public void onResponse(String response) { 
     super(response); 
    } 
} 

Uploaderのコンシューマに対して異なる動作をしたい場合は、サブクラスを以下のように依存関係として指定できます。

Uploaderへの依存を取るためにClassAをリファクタリング:

public ClassA(Uploader uploader) { 
    this.uploader = uploader; 
} 

サブクラスUploader:依存関係としてそれを渡す

Uploader classAUploader = new Uploader() { 
    @Override 
    public void onResponse(String response) { 
     super.onResponse(response); 
     //your code for the special handling in ClassA 
    } 
}; 

ClassA用:

ClassA classA = new ClassA(classAUploader); 

よりよい解決策を使用する可能性がありますコンポジット継承の代わりに繰り返します。従ってUploaderは、ではなくResponse.Listener<String>であり、Response.Listener<String>である。そして、異なるResponse.Listener<String>は上記のようにアップローダの依存として渡すことができます。このテクニックを使用した場合は、Response.Listenerの動作を変更するだけでサブクラス化する必要はありません。Uploader

+0

Uploaderクラスでsuperへの呼び出しが赤色になっていると、サブクラス化を行いましたが、それは魅力的です。 – JPM

+0

@JPMそれは助けてうれしい –

関連する問題