我想在Dart中使用一种responds_to?
的方法而不使用镜像。
我的第一次尝试是将对象投射到dynamic
:
try {
final value = (obj as dynamic).value;
doSomething(value);
} on NoSuchMethodError catch(e) {}
此检查将被非常频繁地调用,并且在大多数情况下可能会失败。引发/捕获大量异常是否会对性能产生影响? (与if语句检查bool
之类的respondTo(obj, 'value')
值相比)
我探索了使用接口的另一种选择:
abstract class ValueBar {
bool hasValue();
}
abstract class ValueFoo {
bool hasValue();
}
class Foo implements ValueFoo {
@override
bool hasValue() => true;
}
class Bar implements ValueBar {
@override
bool hasValue() => false;
}
void main() {
final foo = Bar() as ValueFoo;
}
两个接口共享相同的签名!
但是我得到了
Uncaught Error: CastError: Instance of 'Bar': type 'Bar' is not a subtype of type 'ValueFoo'
我知道这是不可能的,我很想听听其他方法。