我可以在Dart中模拟鸭子打字吗?

时间:2019-12-09 15:39:28

标签: flutter dart

我想在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'

我知道这是不可能的,我很想听听其他方法。

0 个答案:

没有答案