いくつかのユーティリティ メソッドを作成したいのですが、読み取り/書き込み可能な Integer プロパティを提供できる限り、さまざまなオブジェクトで動作できるようにしたいと考えています。
「標準」の方法は次のとおりです。
- と
IProvidesAccessToInteger
を持つインターフェイスを宣言します。setInteger
getInteger
- 宣言する
MyUtility.doSomethingWonderful(IProvidesAccessToInteger obj)
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) のような呼び出し構文でobject
getInteger
getInt
setInteger
setInt
少なくとも理論的には、コンパイル時にすべてを実行でき、実行時のリフレクションを必要としないはずだと思います。
おそらく、これの正しい名前は匿名インターフェースによるものでしょう。
とはいえ、リフレクションによるランタイム ソリューションもソリューションになる可能性があることは認めます。