В вопросе и комментариях происходит некоторое злоупотребление терминологией. В этом коде нет приведений, и, в частности, «Так что, по сути, это серьезная уступка совместимости с Java, приносящая в жертву некоторую устойчивость типов», в действительности не имеет оснований.
Состав скалы выглядит следующим образом: x.asInstanceOf[Y]
.
То, что вы видите выше, является заданием: val z: Seq[Char] = x
Это присваивание допустимо, поскольку существует неявное преобразование из String
в Seq[Char]
. Еще раз подчеркиваю: это не актерский состав . Приведение - это произвольное утверждение, которое может потерпеть неудачу во время выполнения. Невозможно неявное преобразование потерпеть неудачу.
Проблема зависимости от неявных преобразований между типами и ответа на исходный вопрос заключается в том, что неявные преобразования имеют место, только если исходное значение не проверяет тип. Поскольку сопоставление со строкой абсолютно законно, преобразование не выполняется, совпадение просто не удается.