Search
Write a publication
Pull to refresh

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.