Json 如何在Scala中从Iterable中声明类型?
我想知道是否有办法获得底层Iterable中声明的类型,如中所示:Json 如何在Scala中从Iterable中声明类型?,json,scala,type-erasure,Json,Scala,Type Erasure,我想知道是否有办法获得底层Iterable中声明的类型,如中所示: var string: Seq[String] => I want something to return String var int: Seq[Int] = _ => I want something to return Int var genericType: Seq[A] => I want to return A 我需要知道这些类型的类,以便使用底层Json库将Json字符串反序列化为这种类型 差
var string: Seq[String] => I want something to return String
var int: Seq[Int] = _ => I want something to return Int
var genericType: Seq[A] => I want to return A
我需要知道这些类型的类,以便使用底层Json库将Json字符串反序列化为这种类型
差不多
def fromJson[A](jsonString: String)(implicit tag: TypeTag[A]): A = ???
谢谢关于我的问题,我可能没有提供足够的信息。无论如何,我找到了答案 为了从泛型类型检索类,我必须执行以下操作
import scala.reflect.runtime.universe._
val m = runtimeMirror(getClass.getClassLoader)
def myMethod[A](implicit t: TypeTag[A]) = {
val aType = typeOf[A]
aType.typeArgs match {
case x: List[_] if x.nonEmpty => m.runtimeClass(x.head)
case x: List[_] if x.isEmpty => m.runtimeClass(aType)
}
}
scala> myMethod[Seq[String]]
res3: Class[_] = class java.lang.String
scala> myMethod[Seq[Int]]
res4: Class[_] = int
scala> case class Person(name: String)
defined class Person
scala> myMethod[Seq[Person]]
res5: Class[_] = class Person
scala> myMethod[Person]
res6: Class[_] = class Person
然后我可以将这个类提供给底层库来完成它的工作。
谢谢关于我的问题,我可能没有提供足够的信息。无论如何,我找到了答案 为了从泛型类型检索类,我必须执行以下操作
import scala.reflect.runtime.universe._
val m = runtimeMirror(getClass.getClassLoader)
def myMethod[A](implicit t: TypeTag[A]) = {
val aType = typeOf[A]
aType.typeArgs match {
case x: List[_] if x.nonEmpty => m.runtimeClass(x.head)
case x: List[_] if x.isEmpty => m.runtimeClass(aType)
}
}
scala> myMethod[Seq[String]]
res3: Class[_] = class java.lang.String
scala> myMethod[Seq[Int]]
res4: Class[_] = int
scala> case class Person(name: String)
defined class Person
scala> myMethod[Seq[Person]]
res5: Class[_] = class Person
scala> myMethod[Person]
res6: Class[_] = class Person
然后我可以将这个类提供给底层库来完成它的工作。
谢谢你谢谢你Sarvesh的上述建议。我想我需要能够访问的是一个.getClass,例如List[Person],然后我需要知道它是一个人,这样我就可以调用Person.getClass。这将提供给底层库,例如使用反射的Jackson ObjectMapper。可能是另一种定义我的方法来接受类的方式,例如def fromJson(jsonString:String,Class:Class),我试图避免这种情况。感谢Sarvesh提供的上述内容。我想我需要能够访问的是一个.getClass,例如List[Person],然后我需要知道它是一个人,这样我就可以调用Person.getClass。这将提供给底层库,例如使用反射的Jackson ObjectMapper。可能是另一种方法来定义我的方法,以便在类中使用,例如def fromJson(jsonString:String,Class:Class),我试图避免这种情况。