Not directly, no.
You can write a class with private constructors and access them using static methods:
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);
}
}
But this has several problems:
- Classes within the same library can still be subclassed - visibility in Dart applies to libraries, not individual classes.
- This is a lot of code that scales with the number of constructors.
- He introduces many static methods that should all be named differently.
- And, of course, you cannot create an instance of a class outside its library using the keyword
new. - . "" - .
, . , .
, , factory , " 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
}
}
- .