Обычно вы можете комбинировать пункты, как показано в ответе Йони.
Но в конкретном случае, который roar
определен для Lion
и TRex
, но не для Animal
, вы не можете.
Это потому, что компилятор вставляет умное приведение:
is Lion -> animal.roar()
действительно
is Lion -> (animal as Lion).roar()
, но в предложении is Lion, is TRex ->
он не будет знать, что такое приведение
В принципе, компилятор может быть расширен для обработки таких случаев, вставив еще один when
:
is Lion, is TRex -> animal.roar()
, ставший
is Lion, is TRex -> when(animal) {
is Lion -> animal.roar() // works as before
is TRex -> animal.roar()
}
, но я бы не сталне ожидаю, что это произойдет