Как условно привести тип в дротик? - PullRequest
1 голос
/ 28 мая 2019

Кажется, если это просто переменная, я могу условно привести ее следующим образом.

Animal animal = Dog();
if (animal is Dog) {
  animal.bark(); // animal is of type Dog here
}

Но если это свойство класса, как я могу условно привести?

House house = House()
house.animal = Dog();
if (house.animal is Dog) {
  house.animal.bark(); // fail
}

Я знаю, что могу сделать это так

if (house.animal is Dog) {
  Dog animal = house.animal;
  animal.bark();
}

Но это кажется громоздким.Могу ли я проверить и привести тип за один раз, как с переменными?

Большое спасибо.

1 Ответ

2 голосов
/ 28 мая 2019

Кажется, это ограничение Дартса.

Создание подкласса Animal внутри каждого блока if может быть громоздким, если у вас много условий.

Я бы сделал вместо:

House house = House();
Animal animal = house.animal = Dog();

if (animal is Dog) {
  animal.bark();
} else if (animal is Cat) {
  animal.meow();
} else if (animal is Wolf) {
  animal.howl();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...