1

Javaのインターフェースについて読んだので、次のような構造を作成できるインターフェースを作成したいと思います。

public class MyClass implements View.OnTouchListener {
    //Implementation
    public boolean onTouch(View arg0, MotionEvent arg1) {
       /*SOME CODE*/    
       return true;
    }
}

だから私は同様のインターフェース(クラス)を作成したいと思います。どのクラスがメソッドを実装しているかわからない場合、インターフェイスonTouchからメソッドを呼び出すにはどうすればよいですか?OnTouchListenerまた、クラスをインターフェイス(異なるライブラリ)から分離することにした場合、どのクラスがこのインターフェイスを実装しているかをどのように知ることができますか?私が何を意味するのか理解していただければ幸いです。

どうもありがとう!

4

3 に答える 3

1

インターフェイスを実装するクラスは、インターフェイスに配置されたメソッドをオーバーライドする必要があるため、インターフェイスオブジェクトから呼び出すメソッドの実装がクラスにあるかどうかを知る際に安心できます。

から呼び出すには、オブジェクトをタイプの参照に渡し、そこから移動するonTouch必要がありますonTouchListeneronTouchListener

onTouchListener myOnTouchListener = new MyClass();
myOnTouchListener.onTouch(arg0, arg1);

あなたの質問の2番目の部分については、このStackOverflowの質問があなたに役立つはずだと思います。

于 2012-05-24T01:11:25.097 に答える
1

メソッドを実装するクラスがわからない場合、インターフェイスonTouchからメソッドを呼び出すにはどうすればよいですか?OnTouchListener

インターフェイスはメソッドを呼び出しません。私に説明されたように、それらはインターフェースと開発者の間で、このインターフェースを実装するオブジェクトに関係なく、次のシグネチャを持つ次のメソッドを持つという契約を形成します。

では、他の関数と同じ方法でMyClass呼び出し、 andを渡します。onTouchViewMotionEvent

また、クラスをインターフェイスから分離することにした場合 (異なるライブラリ)、どのクラスがこのインターフェイスを実装しているかをどのように知ることができますか?

ここでは、Javadoc が (開発者としての) あなたの友達です。ArrayListあるいは、 、StackQueue、または を保持するものなどのコレクションに対して何かを行っている場合はObjects、次の構文を使用して、使用しているコレクションにインターフェイスを実装するオブジェクトのみが含まれていることを保証できます。

ArrayList<? extends View.OnTouchListener> myArrayList;
于 2012-05-24T01:35:03.717 に答える
1

あなたの質問の一部を理解したような気がします。

クラスをインターフェイスから分離することにした場合 (異なるライブラリ)、どのクラスがこのインターフェイスを実装しているかを知るにはどうすればよいですか?

のようなセットアップを使用して

MyClass myObject = new MyClass();
if(myObject instanceof myInterface){  //if the object implements the interface
    /*Do Something*/
}
else{
    /*Do Something Else Not Including the Method*/
}

instanceof 予約語は、指定されたオブジェクトがそのクラスのインスタンスであるかどうか (継承によるものか実装によるものか) を示します。

David B. はあなたの質問の前半に答えました。オブジェクト自体で onTouch(arg0, arg1) を呼び出します。

myObject.onTouch(arg0,arg1);

あなたの編集を見たところです.instanceofキーワードを使用すると、指定されたオブジェクトがインターフェースを実装しているかどうかを確認できます(つまり、onTouchメソッドがあることを意味します)。このような実装については、上記のコード ブロックを参照してください。

于 2012-05-24T01:16:46.083 に答える