Как я могу получить значение члена данных из подкласса? Если у меня есть такие коды

Существует также простое решение для «итерации» Collection и удаления каждого элемента.

List<String> list = new ArrayList<>();
//Fill the list

Он просто соглашается на цикл, пока список не будет пустым, и на каждой итерации мы удалим первый элемент с remove(0).

while(!list.isEmpty()){
    String s = list.remove(0);
    // do you thing
}

Я не считаю, что это улучшилось по сравнению с Iterator, он все еще должен иметь изменяемый список, но мне нравится простота этого решения .

-1
задан Günter Zöchbauer 18 January 2019 в 15:46
поделиться

1 ответ

Это потому, что Shape не обладает этими свойствами. Сначала вам нужно привести к определенному типу или сделать shapeFactory универсальным.

void main() {
  var s=shapeFactory('square') as Square;
  print(s.area);
  print(s.side);
  var c= shapeFactory('circle') as Circle;
  print(c.area);
  print(c.radius);
}

или

T shapeFactory<T extends Shape>(String type){
  if(type=='circle') return Circle(2) as T;
  if(type=='square') return Square(2) as T;
  throw 'Can\'t create $type.';
}

void main() {
  var s=shapeFactory<Square>('square');
  print(s.area);
  print(s.side);
  var c= shapeFactory<Circle>('circle');
  print(c.area);
  print(c.radius);
}
0
ответ дан Günter Zöchbauer 18 January 2019 в 15:46
поделиться