Я думаю, что ответ находится в Разделе 3.5.3 языкового справочника :
- Байт слабо соответствует короткому
- Short слабо соответствует Int
- Char слабо соответствует Int
- Int слабо соответствует Long
- Long слабо соответствует Float
- Float слабо соответствует Double
Из-за этого Scala делает вывод, что общий тип между Short, Int и Long - Long, а затем преобразует недлинные объекты в Long:
scala> List(0L, 0, 0: Short)
res1: List[Long] = List(0, 0, 0)
Если вы хотите использовать всю цепочку слабого соответствия, попробуйте:
scala> List(0: Byte, 1: Short, 'c', 3, 4L, 5.0f, 6.0)
res2: List[Double] = List(0.0, 1.0, 99.0, 3.0, 4.0, 5.0, 6.0)
И, конечно, чтобы сказать, что вы хотите List[Any]
, просто добавьте [Any]
к вашему звонку на List
:
scala> List[Any](0: Byte, 1: Short, 'c', 3, 4L, 5.0f, 6.0)
res11: List[Any] = List(0, 1, c, 3, 4, 5.0, 6.0)