実行時に効率的なプロパティアクセサーを生成しようとしています。ゲッター/セッターのペアのためにこれを行うByteBuddyを使用して計測されたメソッドのパラメータのフィールドにアクセスする
class SomeProperty implements PropertyAccess<String> {
public void set(Object o, String s) {
((SomeClass) o).setFoo(s);
}
public String get(Object o) {
return ((SomeClass) o).getFoo();
}
}
は(getter
とsetter
簡単です:
interface PropertyAccess<T> {
void set(Object instance, T value);
T get(Object instance);
}
実装は次のようになります。具体的にこれは私がByteBuddyを使用して、次のインタフェースを実装するクラスを生成しています意味します)実際のゲッター、セッターのためのjava.lang.reflect.Method
オブジェクトであること:
new ByteBuddy()
.subclass(Object.class)
.implement(PropertyAccess<String>.class) // pseudo syntax, I am using Guava's TypeToken here in reality
.method(named("get")).intercept(invoke(getter).onArgument(0))
.method(named("set")).intercept(invoke(setter).onArgument(0).withArgument(1))
(私は彼を残しアサイナの入力をObject
からSomeClass
にキャストできるようにする)。
しかしFieldAccessor
はフィールドのみ生成されたクラスの(へのアクセスを可能にしますので、今、私は、また、直接アクセスフィールドのようなクラスを生成できるように、私はカスタムImplementation
クラスを記述せずにそうする方法を見つけることができませんしたいですまたはそのうちの1つ)。
何か不足していますか?
ありがとうございます!私はそのことに注意を払うつもりだ。 – diesieben07