大家好,
我需要创建一个具有Typed函数的Typed类,以解析Array [String]并返回Array [OutputType]
class Data()
class IntData(var element: Int) extends Data
class BoolData(var element: Boolean) extends Data
class ArrayParser[OutputType <: Data]() {
def parse(in: Array[String]): Array[OutputType] = {
in.map(s => parseRecord(s))
}
}
我尝试过:
def parse(in: Array[String]): Array[OutputType] = {
in.map(s => {
import scala.reflect.runtime.universe._
if (typeOf[OutputType] =:= typeOf[IntData])
new IntData(s.toInt)
else
new BoolData(s.toBoolean)
})
}
但出现错误: Array [Data]类型的表达与预期的Array [OutputType]
类型不一致我该怎么做才能达到要求?
感谢您的帮助。
答案 0 :(得分:3)
为什么不定义Typeclass来将字符串解析为相关类型?
trait Parser[T <: Data] {
def parse(s: String): T
}
implicit val intParser: Parser[IntData] = ???
implicit val boolParser: Parser[BoolData] = ???
def parse[T <: Data : Parser](a: Array[String]): Array[T] = {
val p = implicitly[Parser[T]]
a.map(s => p.parse(s))
}
我还建议使Data成为密封的特征及其实现案例类。