Dart 中的松散耦合
Loose coupling in Dart
我试图在我的一个 Flutter 项目中实现松散耦合。它无法找到该方法。
在一个简单的 Dart 代码中复制了相同的内容,我该如何解决这个问题,有什么方法可以在 Dart 中实现松耦合吗?
abstract class A{}
class B extends A{
void help(){
print("help");
}
}
class C {
A b;
C({required this.b});
void test(){
b.help();
}
}
void main() {
var c = C(b:B());
c.test();
}
在 b.help()
处给出错误,该方法确实存在。
确切错误
The method 'help' isn't defined for the type 'A'.
b
已知属于 A
类型,A
接口不提供 help
方法。
我不太清楚你对“松散耦合”的定义是什么(最好描述你要解决的具体问题),但是如果你想 help
在类型 A
上可调用,那么您必须将它添加到 A
接口。
您也可以通过运行时检查将 b
显式向下转换为 B
:
class C {
A b;
C({required this.b});
void test() {
// Shadow `this.b` with a local variable so that the local
// variable can be automatically type-promoted.
final b = this.b;
if (b is B) {
b.help();
}
}
}
或者如果你想要鸭子类型,你可以将 b
声明(或强制转换)为 dynamic
:
class C {
dynamic b;
C({required this.b});
void test() {
try {
b.help();
} on NoSuchMethodError {}
}
}
虽然我认为最后一种形式是糟糕的风格。
我试图在我的一个 Flutter 项目中实现松散耦合。它无法找到该方法。 在一个简单的 Dart 代码中复制了相同的内容,我该如何解决这个问题,有什么方法可以在 Dart 中实现松耦合吗?
abstract class A{}
class B extends A{
void help(){
print("help");
}
}
class C {
A b;
C({required this.b});
void test(){
b.help();
}
}
void main() {
var c = C(b:B());
c.test();
}
在 b.help()
处给出错误,该方法确实存在。
确切错误
The method 'help' isn't defined for the type 'A'.
b
已知属于 A
类型,A
接口不提供 help
方法。
我不太清楚你对“松散耦合”的定义是什么(最好描述你要解决的具体问题),但是如果你想 help
在类型 A
上可调用,那么您必须将它添加到 A
接口。
您也可以通过运行时检查将 b
显式向下转换为 B
:
class C {
A b;
C({required this.b});
void test() {
// Shadow `this.b` with a local variable so that the local
// variable can be automatically type-promoted.
final b = this.b;
if (b is B) {
b.help();
}
}
}
或者如果你想要鸭子类型,你可以将 b
声明(或强制转换)为 dynamic
:
class C {
dynamic b;
C({required this.b});
void test() {
try {
b.help();
} on NoSuchMethodError {}
}
}
虽然我认为最后一种形式是糟糕的风格。