だから、私はこの答えはおそらく「それは難しい」さを実現、しかし:Java:実行時に型の新しい実装を作成しますか?
私は奇妙なアイデアを持っている、そしてそれはのような方法で作成するJavaで可能かどう思っていた:
<T> T wrapInterface (Class<T> interfaceClass, T wrappedObject) {
if (mClass.isInterface()) {
//create a new implementation of interfaceClass that, in each method,
//does some action before delegating to wrappedObject
return thatImplementation;
}
}
を
基本的には、私のインタフェースFooがメソッドfoo()を定義していたら、このメソッドはこのように見える新しいクラスを作成し、そのクラスのインスタンスをコンストラクタパラメータとしてwrappedObjectで作成して返します。 :
public class GeneratedClass implements Foo {
private Foo wrapped;
public GeneratedClass (Foo wrapped) {
this.wrapped = wrapped;
}
@Override
public void foo() {
System.out.println("Calling Foo.foo() on wrapped object " +
wrapped.toString());
wrapped.foo();
}
}
アプリケーション私は、呼び出しをログに記録するよりも複雑であると考えていますが、ロギングだけで十分です。私は多くのインターフェイスタイプでこれをやりたいので、GeneratedClassesを手で書くのではないのです。
標準的なJDKライブラリだけで可能な場合は、余分な言語機能(AspectJやそのような行に沿ったもの)を必要としないソリューションのボーナスポイントとダブルボーナスポイント。
(私は正確に、コンパイル可能な答えを必要としません;。私はこれをやらせるだろうツール/ライブラリ/などの権利セットにだけポインタ)
ありがとう!
反射は、余分な言語的特徴です。 –
[動的プロキシクラス](http://docs.oracle.com/javase/7/docs/technotes/guides/reflection/proxy.html)を調べるとよいでしょう。 –