不直接,不。
您可以编写一个带有私有构造函数的类并通过静态方法访问它们:
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);
}
}
但这有多个问题:
- 同一库中的类仍然可以对其进行子类化 - Dart 中的可见性适用于库,而不是单个类。
- 这是很多代码,随着构造函数的数量而扩展。
- 它引入了许多静态方法,所有这些方法都必须以不同的方式命名。
- 当然,您不能在其库之外实例化该类
new
关键词。
- 这只会阻止类的扩展。实现“最终”类仍然是可能的。
最终,这些是此功能的一些缺点。由您决定是否真的值得。
EDIT
与我之前写的相反,工厂构造函数也可以工作,消除了“无法实例化”new
关键字”的缺点。
class MyFinalClass {
factory MyFinalClass.ctor1() {}
factory MyFinalClass.ctor2(String param1, String param2) {}
void method1() {}
void method2() {}
}
另外,为了说明为什么实现非最终类的能力是一个大问题:
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
}
}
这种伪子类化也适用于静态方法变体。