未来を返すミラーを持つことは、それらでできることを劇的に制限します。
例えば、
class ObjectA {
methodA(){}
methodB(){}
}
class DynamicWrapper extends MagicalDynamicWrapper {
ObjectA real;
Map<String, Function> methods;
DynamicWrapper(this.real, this.methods);
}
var w = new DynamicWrapper(new ObjectA(), {"methodB" : (){ 'do something' }});
w.methodA() // calls ObjectA.methodA
w.methodB() // calls 'do something'
私が通常行う方法は、MagicalDynamicWrapper で noSuchMethod を定義することです。
- メソッドマップにそのような名前のメソッドがあるかどうかを確認し、それを呼び出します。
- 存在しない場合は、リフレクションを介して「実際の」オブジェクトを呼び出します。
残念ながら、実際のオブジェクトを呼び出すと、常に未来が返されます。だからうまくいかない。
ある時点で (値ゲッターを使用して) Future の値を取得することができましたが、そのゲッターは使用できなくなりました。
私の質問:
リフレクション呼び出しの結果を同期的に取得する方法はありますか?
分散設定では、先物は間違いなく進むべき道です。しかし、すべてのメタ情報が利用可能な非分散設定では、リフレクション呼び出しの値を取得できるはずです。テスト フレームワークとビルド ツールの作成者にとって、私は大きな違いをもたらすでしょう。