Метод noSuchMethod
Метод noSuchMethod класса Object
вызывается автоматически, когда происходит
обращение к несуществующему методу или
свойству объекта. В первый параметр мы
передаем объект Invocation, который
содержит информацию о вызванном методе:
его имя, позиционные и именованные аргументы.
По умолчанию метод выбрасывает исключение
NoSuchMethodError. Переопределив его,
можно изменить поведение объекта при
обращении к отсутствующим членам.
Синтаксис
dynamic noSuchMethod(Invocation invocation)
Пример
Давайте переопределим метод noSuchMethod
в классе и посмотрим, что произойдет при
обращении к несуществующему методу:
class MyClass
{
@override
dynamic noSuchMethod(Invocation invocation)
{
print('Method not found: ${invocation.memberName}');
return null;
}
}
void main()
{
MyClass obj = MyClass();
obj.unknownMethod();
}
Результат выполнения кода:
"Method not found: Symbol(\"unknownMethod\")"
Пример
Давайте получим информацию об аргументах, переданных в несуществующий метод:
class MyClass
{
@override
dynamic noSuchMethod(Invocation invocation)
{
print('Name: ${invocation.memberName}');
print('Positional: ${invocation.positionalArguments}');
print('Named: ${invocation.namedArguments}');
return null;
}
}
void main()
{
MyClass obj = MyClass();
obj.unknownMethod(1, 2, name: 'abcde');
}
Результат выполнения кода:
"Name: Symbol(\"unknownMethod\")"
"Positional: [1, 2]"
"Named: {Symbol(\"name\"): abcde}"
Пример
Давайте переопределим метод noSuchMethod
так, чтобы он возвращал значение по умолчанию
вместо выброса исключения:
class MyClass
{
@override
dynamic noSuchMethod(Invocation invocation)
{
return 'default';
}
}
void main()
{
MyClass obj = MyClass();
dynamic res = obj.unknownMethod();
print(res);
}
Результат выполнения кода:
"default"
Смотрите также
-
класс
Object,
который является базовым классом для всех объектов -
метод
toString,
который возвращает строковое представление объекта -
свойство
runtimeType,
которое возвращает тип объекта во время выполнения -
ключевое слово
operator,
которое позволяет переопределять операторы