Scala:类型化方法 returns 所提供类型的对象
Scala: Typed method that returns object of the provided Type
大家好,
我需要创建一个 Typed Class 和一个 Typed 函数来解析 Array[String] 和 returns 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)
})
}
但我收到错误:类型数组[Data] 的表达式不符合预期类型数组[OutputType]
我该怎么做才能达到要求?
感谢您的帮助。
为什么不定义一个类型类来将字符串解析为相关类型?
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 设为密封特征及其实现案例 类。
大家好,
我需要创建一个 Typed Class 和一个 Typed 函数来解析 Array[String] 和 returns 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)
})
}
但我收到错误:类型数组[Data] 的表达式不符合预期类型数组[OutputType]
我该怎么做才能达到要求?
感谢您的帮助。
为什么不定义一个类型类来将字符串解析为相关类型?
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 设为密封特征及其实现案例 类。