Задать вопрос

Почему ошибка инициализации переменной класса в конструкторе?

Подскажите почему в конструкторе класса не происходит инициализация переменной?
class IPAddress {
  late List<int> octets;

  IPAddress(List<int> octets) {
    print('ok');
    if (octets.length != 4) {
      throw ArgumentError('4 значения должно быть');
    }
    for (int i = 0; i < 4; i++) {
      if (octets[i] < 0 || octets[i] > 255) {
        throw RangeError.range(octets[i], 0, 255);
      } else {
        this.octets.add(octets[i]);
      }
    }
  }

  int operator [](int index) {
    if (0 > index || index > 3) {
      throw RangeError.range(index, 0, 3);
    }
    return octets[index];
  }

  void operator []=(int index, int value) {
    if (0 > index || index > 3) {
      throw RangeError.range(index, 0, 3);
    }
    octets[index]=value;
  }

  IPAddress operator &(IPAddress other) {
    List <int> temp = [];
    for(int i=0; i<4;i++){
      temp.add(octets[i] & other.octets[i]);
    }
    return IPAddress(temp);
  }

  IPAddress operator |(IPAddress other) {
    List <int> temp = [];
    for(int i=0; i<4;i++){
      temp.add(octets[i] | other.octets[i]);
    }
    return IPAddress(temp);
  }

  IPAddress operator ^(IPAddress other) {
    List <int> temp = [];
    for(int i=0; i<4;i++){
      temp.add(octets[i] ^ other.octets[i]);
    }
    return IPAddress(temp);
  }
}
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Потому-что вы используете отложенную инициализацию поля octets класса IPAddress (см. Late и отложенная инициализация), но в последствии нигде её не инициализируете.

Вариант 1:
class IPAddress {
  final List<int> octets = [];
  IPAddress(List<int> octets) { 
    ... 
  }
  ...
}

Вариант 2:
class IPAddress {
  late List<int> octets;
  IPAddress(List<int> octets) { 
    this.octets = [];
    ... 
  }
  ...
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы