noSuchMethod 方法

dynamic noSuchMethod(
  1. Invocation invocation
)

当访问不存在的方法或属性时被调用。

动态成员调用尝试调用接收对象上不存在的方法。示例

dynamic object = 1;
object.add(42); // Statically allowed, run-time error

此无效代码将调用整数 1noSuchMethod 方法,并通过 Invocation 对象表示的 .add(42) 调用和参数(然后抛出异常)。

类可以重写 noSuchMethod 来提供此类无效动态调用的自定义行为。

具有非默认 noSuchMethod 调用的类还可以省略其接口成员的实现。示例

class MockList<T> implements List<T> {
  noSuchMethod(Invocation invocation) {
    log(invocation);
    super.noSuchMethod(invocation); // Will throw.
  }
}
void main() {
  MockList().add(42);
}

尽管 MockList 类没有实现任何 List 接口方法,但此代码没有编译时警告或错误。对 List 方法的调用将转发到 noSuchMethod,因此此代码将记录类似于 Invocation.method(#add, [42]) 的调用,然后抛出异常。

如果从 noSuchMethod 返回值,它将成为原始调用的结果。如果返回值不是原始调用可以返回的类型,则在调用时发生类型错误。

默认行为是抛出 NoSuchMethodError

实现

@pragma("vm:entry-point")
@pragma("wasm:entry-point")
external dynamic noSuchMethod(Invocation invocation);