Если вы хотите научиться программировать с помощью Scala, вы должны узнать о разнице между типами и значениями .
Из-за параметров типа стирания типа никогда не бываетсделать это в вашей программе.В действительности, типы существуют только для того, чтобы помочь вам написать хороший код.
Если вы пойдете по этому пути, вы в конечном итоге поймете, что asInstanceOf[T]
на самом деле не делает ничего .
Вы можете подумать, что это странно, и с помощью стирания типов система типов является излишней, но позвольте мне заверить вас, что она совершенно полезна, а когда дело доходит до более сложного кода, на самом деле становится трамплином для общего программирования ,например, код, который может использоваться многими различными способами из-за параметризации типа.
Чтобы развернуть это немного дальше, вы почти никогда не должны получить val
типа Any
, потому что вы потеряете эту дополнительную безопасность.сеть статической типизации.Это означает, что вы уже допустили ошибку где-то вверх по течению в своем коде.
Ваша конечная цель проста в достижении:
def convertIntoDoc[MType](doc: Any) = {
val docNew = doc.asInstanceOf[MType]
docNew
}
Вы просто должны помнить, что MType
является типом ине переменная.Поэтому его следует использовать как параметр типа, а не как параметр значения.
Проблема в том, что приведение Any
в MType
даст вам ClassCastException
с (при запуске вашей программы!), Есливы используете неправильный тип.
asInstanceOf
очень опасен, потому что он перезаписывает безопасность типов, которую обеспечивает компилятор Scala.
Если у вас есть какие-либо вопросы по этому поводу, дайте мне знать.