Comments 6
В примере с get/set похоже ошибка и должно быть так:
class A {
int x = 10;
}
class B extends A {
@override
int get x => 20;
}
void main() {
final b = B();
b.x = 30; // здесь не будет ошибки компиляции и присвоения тоже не будет
print(b.x);
}
Использовать late в этом случае нельзя
Спорный момент, а что если сделать так?
class Cat {
Cat() {
print('I\'m constructed');
}
late final int age = (){
print('I\'m born');
return 0;
}();
}
void main() {
final cat = Cat();
print(cat.age);
print(cat.age);
}
Спасибо, не фига не понял, но оч интересно
В последних версиях Dart стало возможным передавать ссылку на конструктор класса (
ClassName::new
) или factory-метод (ClassName::factoryMethod
).
нужно поправить синтаксис на дартовый :)
class IntWrapper {
IntWrapper(this.value);
final int value;
}
final intIterable = [1, 2, 3].map(IntWrapper.new);
По поводу Абстрактной фабрики. Нам не обязательно наличие публичного конструктора в базовом классе. Достаточно наличие приватного конструктора
enum AnimalType {
Cat, Dog, Cow,
}
class Animal {
Animal._();
factory Animal(AnimalType type) {
switch (type) {
case AnimalType.Cat:
return _Cat();
case AnimalType.Dog:
return _Dog();
case AnimalType.Cow:
return _Cow();
}
}
String get type => 'Unknown';
}
class _Cat extends Animal {
_Cat() : super._();
@override
String get type => 'Cat';
}
class _Dog extends Animal {
_Dog() : super._();
@override
String get type => 'Dog';
}
class _Cow extends Animal {
_Cow() : super._();
@override
String get type => 'Cow';
}
void main() {
final myCat = Animal(AnimalType.Cat);
print(myCat.type);
}
Sign up to leave a comment.
Паттерны проектирования в Dart