2016-11-17 10 views
0

のオーバーロードされた方法で唯一の方法:オーバーライド私はこのコードを持っているJavaインターフェース

public interface AsyncResponse { 
    abstract void processFinish(JSONObject output); 
    abstract void processFinish(String output); 
} 

私はこのようにそれを使用する:私は唯一の方法(例えばのみオーバーロード場合

new AsyncResponse(){ 
    @Override 
    public void processFinish(JSONObject output) { 
     //code 
    } 

    @Override 
    public void processFinish(String output) { 
     //code 
    } 
} 


"クラス 'AsyncResponseから派生した匿名クラス'は抽象宣言するか、抽象メソッド 'processFinish(String)'を 'AsyncResponse'に実装する必要があります"

可能であれば、どちらか一方のメソッドだけをオーバーロードする必要があります。両方をオーバーロードする必要はありません。 doInBackgroundのみがOverride -edである必要があり、ontherメソッドがオプションであるAsyncTaskに類似しているかどうかわかりません。

質問に正しいプログラミング用語を使用しているかどうかはわかりませんが、私がする必要があることがわかります。

答えて

1

は、それは不可能です。

public interface AsyncResponseWithJSONObject { 
    void processFinish(JSONObject output); 
} 
public interface AsyncResponseWithString { 
    void processFinish(String output); 
} 

文字列が後者とJSON前者を実装扱うことができるクラスを実装扱うことができるクラス。

Then why can AsyncTask do it?

AsyncTask抽象クラス、ないインタフェースです。抽象クラスを拡張する場合は、abstractメソッドを実装するだけです。一方、インタフェースでは、すべてのメソッドを実装する必要があります。

(インタフェースのすべてのメソッドは暗黙的に抽象的であるため)だから、あなたにも抽象クラスを使用して試すことができます:

public abstract class AsyncResponse { 
    public void processFinish(JSONObject output) { 

    } 

    public void processFinish(String output) { 

    } 
} 
1

インターフェイスを実装する場合は、インターフェイスに存在するすべてのメソッドをオーバーライドする必要があります。その周りに道はない。

あなたが部分的にそれを無効にしたい場合は、このように、AsyncResponseクラスを作る:

public class AsyncResponse { 
    public void processFinish(JSONObject output) { 
    } 
    public void processFinish(String output) { 
    } 
} 

あなたは、このクラスを拡張する場合さて、あなたはすべてのメソッドをオーバーライドする必要がある必要はありません。あなたが二つにインターフェイスを分割しない限り、

1

あなたのインターフェイス(Java8以降)にデフォルトを追加することができ

public interface AsyncResponse { 
    abstract void processFinish(JSONObject output); 
    default void processFinish(String output) { 
     // some code 
    } 
} 
0

それがオーバーロードしていない場合でも

public interface AsyncResponse<T> { 
    void processFinish(T output); 
} 

を?:に何が起こったのか、それは私の目では簡単なようです。

関連する問題