Ответ 1
Выполнение тестового коварианта в T
означает, что Test[A]
является подтипом Test[Any]
для любого A
. Поэтому давайте создадим Test
:
val test_string = new Test[String]
Теперь у нас есть Test[String]
, а содержащийся list
- тип List[String]
.
Так как Test[String]
является подтипом Test[Any]
, то должно быть разрешено:
val test_any : Test[Any] = test_string
И теперь у нас есть Test[Any]
, поэтому test_any.list
- это тип List[Any]
, что означает, что должно быть справедливо следующее:
test_any.list = List[Any]()
Это означает, что мы просто назначили элемент списка List[Any]
для test_strings, который не должен быть разрешен, так как предполагается, что это List[String]
, а не List[Any]
. Это также означает, что вы могли бы добавить что-нибудь вообще в список, так как это тип List[Any]
.