Для этого вам не нужно писать, не говоря уже о мониторинге времени выполнения. Это именно то, что делает язык со строгой типизацией для вас из коробки. Если вы хотите убедиться, что конкретный тип коллекции передается в API, просто объявите, что этот API принимает , что тип коллекции (например, def foo(x: Stream[Bar])
, а не def foo(x: Seq[Bar])
и т. Д.).
В качестве альтернативы, если это практически возможно, просто преобразуйте в нужный тип как часть реализации: def foo(x: List[Bar]) = { val y = x.toArray ; lotsOfRandomAccess(y); }
Коллекции, которые «созданы внутри», обычно имеют тот же тип, что и родительский объект: List(1,2,3).map(_ + 1)
возвращает List
и т. Д.
Опять же, если вы хотите убедиться, что используете определенный тип, просто скажите так:
val mapped: List[Int] = List(1,2,3).map(_ + 1)
На самом деле, вы можете изменить шрифт таким образом, если в этом есть необходимость:
val mappedStream: Stream[Int] = List(1,2,3).map(_ + 1)(breakOut)