Я пытаюсь обойти стирание стилей и динамически преобразовывать список значений различных типов с использованием классов значений в json и обратно в соответствующие типы с помощью Json4s CustomSerializer. Однако я не смог динамически извлекать правильные значения. Из-за ссылки на AnyVal, я вынужден использовать value.toString при преобразовании в Json и сталкиваются с проблемами при воссоздании моих полей из json.классы стирания и значения scala типа
Я пробовал свою руку на scala в течение трех недель, поэтому я все еще изучаю веревки. Любая помощь будет оценена по достоинству.
abstract class MyVal {
def name: String
def value: AnyVal
}
trait Field {
def value: AnyVal
}
object Field {
def build(value: String): MyString = MyString(value)
def build(value: Int): MyInt = MyInt(value)
def build(value: Double): MyDouble = MyDouble(value)
}
case class MyString(val value: String) extends AnyVal with Field
case class MyInt(val value: Int) extends AnyVal with Field
case class MyDouble(val value: Double) extends AnyVal with Field
object MyVal {
case class StringVal(name: String, value: MyString) extends MyVal
case class IntVal(name: String, value: MyInt) extends MyVal
case class DoubleVal(name: String, value: MyDouble) extends MyVal
def build(name: String, value: String): StringVal = StringVal(name, MyString(value))
def build(name: String, value: Int): IntVal = IntVal(name, value)
def build(name: String, value: Double): DoubleVal = DoubleVal(name, value)
}
object Main {
def main(args: Array[String]) = {
var fields = Seq.empty[MyVal]
var row = Map("length" -> 1, "name" -> "test", "cost" -> 2.0)
var columns = Seq[String]("length", "name", "cost")
val fields: Seq[MyVal] = row foldLeft (Seq.empty[MyVal]) {
(previousFields: Seq[MyVal], currentField: Any) => {
columns map {
column => MyVal.build(column, Field.build(row(column)))
}
}
}
}
}
Методы сборки не устраняются правильно из-за двусмысленности.
большое спасибо! – rreiki