飞镖中的NoSuchMethod?
NoSuchMethod in dart?
尝试使用 noSuchMethod() 时收到警告。
The method missing isn't defined for the class Person.
但是根据文档和其他示例,每当我们调用一个不存在的成员时,都应该调用 noSuchMethod()。其默认行为是抛出 noSuchMethodError。
void main() {
var person = new Person();
print(person.missing("20", "Shubham")); // is a missing method!
}
class Person {
@override
noSuchMethod(Invocation msg) => "got ${msg.memberName} "
"with arguments ${msg.positionalArguments}";
}
根据官方文档调用未实现的方法,你必须满足以下几点之一:
- 接收器具有静态类型动态。
- 接收器具有定义未实现方法的静态类型
(抽象是可以的),接收者的动态类型有一个
noSuchMethod() 的实现与 class 中的不同
对象。
示例 1:首先满足点
class Person {
@override //overring noSuchMethod
noSuchMethod(Invocation invocation) => 'Got the ${invocation.memberName} with arguments ${invocation.positionalArguments}';
}
main(List<String> args) {
dynamic person = new Person(); // person is declared dynamic hence staifies the first point
print(person.missing('20','shubham')); //We are calling an unimplemented method called 'missing'
}
示例 2:满足点秒
class Person {
missing(int age,String name);
@override //overriding noSuchMethod
noSuchMethod(Invocation invocation) => 'Got the ${invocation.memberName} with arguments ${invocation.positionalArguments}';
}
main(List<String> args) {
dynamic person = new Person(); //person could be var, Person or dynamic
print(person.missing(20,'shubham')); //calling abstract method
}
尝试使用 noSuchMethod() 时收到警告。
The method missing isn't defined for the class Person.
但是根据文档和其他示例,每当我们调用一个不存在的成员时,都应该调用 noSuchMethod()。其默认行为是抛出 noSuchMethodError。
void main() {
var person = new Person();
print(person.missing("20", "Shubham")); // is a missing method!
}
class Person {
@override
noSuchMethod(Invocation msg) => "got ${msg.memberName} "
"with arguments ${msg.positionalArguments}";
}
根据官方文档调用未实现的方法,你必须满足以下几点之一:
- 接收器具有静态类型动态。
- 接收器具有定义未实现方法的静态类型 (抽象是可以的),接收者的动态类型有一个 noSuchMethod() 的实现与 class 中的不同 对象。
示例 1:首先满足点
class Person {
@override //overring noSuchMethod
noSuchMethod(Invocation invocation) => 'Got the ${invocation.memberName} with arguments ${invocation.positionalArguments}';
}
main(List<String> args) {
dynamic person = new Person(); // person is declared dynamic hence staifies the first point
print(person.missing('20','shubham')); //We are calling an unimplemented method called 'missing'
}
示例 2:满足点秒
class Person {
missing(int age,String name);
@override //overriding noSuchMethod
noSuchMethod(Invocation invocation) => 'Got the ${invocation.memberName} with arguments ${invocation.positionalArguments}';
}
main(List<String> args) {
dynamic person = new Person(); //person could be var, Person or dynamic
print(person.missing(20,'shubham')); //calling abstract method
}