0

いくつかのユーティリティ メソッドを作成したいのですが、読み取り/書き込み可能な Integer プロパティを提供できる限り、さまざまなオブジェクトで動作できるようにしたいと考えています。

「標準」の方法は次のとおりです。

  1. IProvidesAccessToIntegerを持つインターフェイスを宣言します。setIntegergetInteger
  2. 宣言するMyUtility.doSomethingWonderful(IProvidesAccessToInteger obj)
  3. obj.setIntegerとを呼び出しますobj.getInteger

しかし、これには非常に大きな欠点があります。それは、私が作業したいすべてのクラスの協力が必要であり、それMyUtilityだけでなく、一部のクラスが協力したい場合でも、そのクラスの所定の 1 つのフィールドMyUtilityしかできないということです。.doSomethingWonderful()

MyUtility.doSomethingWonderful(T obj, Method<Integer> getter, Method<Integer,Integer> setter)何らかの形でジェネリックを使用してobj、整数を設定および設定する2つのメソッドがあり、のインスタンスでそれらを呼び出す方法があるという要件を指定できる構文を探していますobj

オブジェクトを必要としない静的メソッドで同様のことを行うのも興味深いかもしれません。

更新: リフレクションを指摘されたので、リフレクションを使用して近いことができることを知っていることを明確にしたいと思います。

ただし、実行時に実際のインターフェイスを解決する必要がないため、JAVA には「インターフェイス フルフィルメント マップ」のようなものを指定する何らかの方法があることを期待していました。私の要件が 2 つのメソッドを持つオブジェクトであり、int ?()指定void ?(int)できる場合のようなもの.doSomethingWonderful(?<int getter(),void setter(int)> obj)で、and を持ついくつかの object1 で 1 回呼び出し、and を持つint getInt()void setInt(int)のobject2 で 1 回呼び出しint getIntValue()、byの要件を満たし、 byの要件を満たすvoid setIntValue(int)呼び出しで指定することなどです。おそらく `.doSomethingWonderful((?)object1) のような呼び出し構文でobjectgetIntegergetIntsetIntegersetInt

少なくとも理論的には、コンパイル時にすべてを実行でき、実行時のリフレクションを必要としないはずだと思います。

おそらく、これの正しい名前は匿名インターフェースによるものでしょう。

とはいえ、リフレクションによるランタイム ソリューションもソリューションになる可能性があることは認めます。

4

3 に答える 3

1

あなたのゲッターとセッターはかなり反射のパラダイムです。しかし、それは多くのリスクをインポートし、パフォーマンスを低下させます。インターフェイス指向プログラミングは、このシナリオを処理するためのかなり一般的な「標準」です。

于 2013-10-31T09:01:52.737 に答える