간단한 가볍고 값이 싼 호출을 사용하면 개체가 명명 된 메서드를 지원하는지 확인할 수 있습니까? 그래서,이 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)
};
}
}
하나의 대안은 단지 그것을 호출하고 noSuchMethod 예외를 잡아,하지만 난 그 나쁜 연습과 비용이 상상하는 것? 짧은 대답은 '전혀'없다
bool respondsTo(dynamic obj, String methodName)
{
var mirror = reflect(obj);
return mirror.type.methods.values.map((MethodMirror method) => method.simpleName)
.contains(methodName);
}