Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何在Scala中从Iterable中声明类型?_Json_Scala_Type Erasure - Fatal编程技术网

Json 如何在Scala中从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字符串反序列化为这种类型 差

我想知道是否有办法获得底层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字符串反序列化为这种类型

差不多

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),我试图避免这种情况。