То, что я хочу сделать, это возвращать универсальный тип в функции Scala с помощью TypeTag.Вот пример кода.
trait Parent[T]
object IntChild extends Parent[Int]
object StringChild extends Parent[String]
object SomeClass {
def of[A: TypeTag]: Parent[T] = {
getElementType[A] match {
case Int => IntChild
case String => StringChild
}
}
}
SomeClass.of[Array[Int]]
Но он выдает ошибку компиляции.Поскольку возвращаемый тип метода of
не зафиксирован в типе компиляции.Есть ли способ получить информацию о типе из TypeTag и встроить тип в возвращаемый тип?
То, что я ожидаю, похоже на
// T is inferred from TypeTag A.
def of[A: TypeTag, T]: Parent[T] = {
//...
}
Я обнаружил, что этот код также не прошел компиляцию,Поэтому нам нужно исправить информацию о типе, выведенную из TypeTag А.
def of[A: TypeTag]: Parent[_] = {
//...
}
Это ошибка.
type mismatch;
[error] found : Array[Int]
[error] required: Array[_$1]
Как я могу получить тип элемента заранее?