是否有一个简单,轻量级/廉价的调用来确定对象是否支持命名方法?所以,在这个obj.respondsTo会很棒.
dynamic _toJson(dynamic obj) {
return obj.respondsTo('toJson'))? obj.toJson() : obj;
}
class Foo {
String foo = "Foo.foo";
Bar bar = new Bar();
Map toJson() {
return {
"foo" : _toJson(foo),
"bar" : _toJson(bar)
};
}
}
Run Code Online (Sandbox Code Playgroud)
一种替代方法是调用它并捕获noSuchMethod异常,但我认为这是不好的做法而且价格昂贵?
最简洁的答案是不'.FrédéricHamidi提供的答案并不正确,但它在dart2js中不起作用(dart:镜子在dart2js中基本上没有实现).
此外,在检查对象是否响应特定方法时,在其他语言(例如Ruby)中非常常见,但对我来说它似乎并不特别Dart-y.也许一旦Dart完全支持镜像,这将会改变.
而且很难说基于镜子的反射是"轻量/便宜".这取决于用例以及如何定义这些术语.
我想说你最好的办法是调用对象上的方法,捕获NoSuchMethod异常,并实现一些默认的错误处理行为.如果您通常期望该方法存在,这尤其有意义.
| 归档时间: |
|
| 查看次数: |
1352 次 |
| 最近记录: |