5

私はJavaの経験があまり豊富ではなく、現時点で十分に理解できていますが、まだ完璧ではないので、これがばかげた質問である場合はお詫び申し上げます。

あらゆる種類のオブジェクトを渡すことができるクラスを作成しようとしていますが、渡されるオブジェクトに特定のメソッドがあるかどうかを確認する必要があります。これをテストするにはどうすればよいですか?

これが理にかなっていることを願っています。乾杯。

編集

すべての速い返信をありがとう!私はインターフェースなどにあまり詳しくないので、それらの使い方がよくわかりません。しかし、私が何をしているのかをよりよく理解するために、たとえば、オブジェクトのアルファに影響を与えるクラスを作成しようとしていImageViewますTextView。各オブジェクトを個別にリストせずに、そのためのインターフェイスを作成するにはどうすればよいでしょうか。必要なのは、オブジェクトにメソッドがあることを確認することだけ.setAlpha()です。これは意味がありますか?乾杯。

4

5 に答える 5

14

より良いアイデアは、そのメソッドでインターフェースを作成し、それをパラメータータイプにすることです。メソッドに渡されるすべてのオブジェクトは、そのインターフェイスを実装する必要があります。

それはクライアントとの契約を表現することと呼ばれます。その方法が必要な場合は、そう言ってください。

于 2012-05-26T23:32:19.137 に答える
8

でインスタンスのクラスを取得し、クラスにそのメソッドがない場合はObject.getClass()を使用Class.getMethod(String, Class...)してキャッチします。NoSuchMethodException

一方、これはJavaではあまり良い方法ではありません。代わりにインターフェイスを使用してみてください。

于 2012-05-26T23:31:57.580 に答える
3

これは、Javaリフレクションを使用して行うことができます。

object.getClass().getMethods()オブジェクトの配列を取得するようなものMethodです。または、を使用getMethod()して特定の名前のオブジェクトを取得することもできます(パラメーターを定義する必要があります)。

于 2012-05-26T23:32:55.113 に答える
2

setAlpha()まず、メソッドを実装するためにそれを実装するすべてのオブジェクトを必要とするインターフェイスを定義します。

public interface AlphaChanger {
    public void setAlpha(int alpha); // concrete classes must implement this
}

次に、このインターフェイスを実装するクラスを定義します。

public class Thing implements AlphaChanger {
    public void setAlpha(int alpha) { // must be present
        // implementation
    }
}

AlphaChangerこれで、メソッドに渡されるすべてのオブジェクトがインターフェースを実装する必要があることを要求できます。

public void yourMethod(AlphaChanger changer) {
    changer.setAlpha(10); // you know for sure the method exists
}
于 2012-05-26T23:42:17.543 に答える
0

次のようにクラスのメソッドをリストすることができます(例:FooBarクラス):

Class fooBar= FooBar.class;
Method[] methods = fooBar.getDeclaredMethods();
if (methods.length == 0){
...
} else{
...
}
于 2012-05-26T23:34:59.953 に答える