Метод noSuchMethod
- Invocation invocation
Вызывается при обращении к несуществующему методу или свойству.
Вызов динамического члена может попытаться вызвать член, которого нет в получаемом объекте. Пример:
dynamic object = 1; object.add(42); // Statically allowed, run-time error
Этот некорректный код вызовет метод noSuchMethod целого числа 1 с 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")
external dynamic noSuchMethod(Invocation invocation);
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-core/Object/noSuchMethod.html