有没有办法避免 Dart 中的继承?我正在寻找类似的东西
final class MyJavaClass {
...
}
Run Code Online (Sandbox Code Playgroud)
不直接,不。
您可以使用私有构造函数编写一个类并通过静态方法访问它们:
class MyFinalClass {
MyFinalClass._ctor1() {}
MyFinalClass._ctor2(String param1, String param2) {}
static MyFinalClass getInstance() {
return new MyFinalClass._ctor1();
}
static MyFinalClass getInstanceWithParams(String param1, String param2) {
return new MyFinalClass._ctor2(param1, param2);
}
}
Run Code Online (Sandbox Code Playgroud)
但这有多个问题:
new关键字在其库之外实例化该类。最终,这些是此功能的许多缺点。是否真的值得由你来决定。
编辑
与我之前写的相反,工厂构造函数也可以工作,消除“无法用new关键字实例化”的缺点。
class MyFinalClass {
factory MyFinalClass.ctor1() {}
factory MyFinalClass.ctor2(String param1, String param2) {}
void method1() {}
void method2() {}
}
Run Code Online (Sandbox Code Playgroud)
另外,为了说明为什么实现非最终类的能力是一个大问题:
class Sub implements MyFinalClass {
MyFinalClass _d;
Sub.ctor1() {
_d = new MyFinalClass.ctor1();
}
Sub.ctor2(String p1, String p2) {
_d = new MyFinalClass.ctor2(p1,p2);
}
void method1() => _d.method1();
void method2() {
// do something completely different
}
}
Run Code Online (Sandbox Code Playgroud)
这种伪子类化也适用于静态方法变体。
| 归档时间: |
|
| 查看次数: |
1614 次 |
| 最近记录: |