让镜子返回期货极大地限制了你可以用它们做的事情。
例如,
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 的值(使用 value getter),但该 getter 不再可用。
我的问题:
有没有办法同步获得反射调用的结果?
在分布式环境中,futures 绝对是要走的路。但是在所有元信息都可用的非分布式设置中,应该可以获取反射调用的值。我会对测试框架和构建工具的作者产生巨大的影响。