Я новичок в scala, и у меня есть вопросы по дженерикам scala.
Вопрос в том, как метод animalContainer.add принимает новый Cat. Насколько я понимаю, B>:A - A - животное, а B - кошка. Кошка НЕ является супертипом животного. Как работает..
Я новичок в scala, и у меня есть вопросы по дженерикам scala.
Вопрос в том, как метод animalContainer.add принимает новый Cat. Насколько я понимаю, B>:A - A - животное, а B - кошка. Кошка НЕ является супертипом животного. Как работает..
B не кошка, B - животное. Таким образом, предполагаемый тип добавления выглядит следующим образом:
def add(element: Animal)
Вы можете передать Cat здесь, потому что Cat расширяет Animal.
add
. Когда вы это сделаете, вы увидите, что компилятор позволит вам создать новый экземплярContainer[B]
только для того, чтобы это работало, а когда вы создадите новый контейнер, это будетContainer[Animal]
, а неContainer[Dog]
. - person Yuval Itzchakov   schedule 04.12.2019Cat
, а скорееAnimal
. - person Luis Miguel Mejía Suárez   schedule 04.12.2019new Cat
имеет (среди прочего) типы Cat, Animal, AnyRef, Any и т. д. Таким образом, в этом случае необходимо вывести B, для этой цели компилятор пытается найти LUB< /b> между Animal и всеми типамиnew Cat
, в данном случае подразумевается Animal. - person Luis Miguel Mejía Suárez   schedule 04.12.2019