Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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的GSON-无法为Scala.collection.immutable.Map调用无参数构造函数_Json_Scala_Deserialization_Gson - Fatal编程技术网

Json 带Scala的GSON-无法为Scala.collection.immutable.Map调用无参数构造函数

Json 带Scala的GSON-无法为Scala.collection.immutable.Map调用无参数构造函数,json,scala,deserialization,gson,Json,Scala,Deserialization,Gson,下面是一个示例Scala对象,我想在其中将JSON字符串反序列化为字符串映射->字符串。我使用GSON 2.2.2和Scala 2.10 import com.google.gson.Gson import com.google.gson.reflect.TypeToken object MyTest { def main(args: Array[String]) { val gson = new Gson val jsonString = "{\"test1\": \"v

下面是一个示例Scala对象,我想在其中将JSON字符串反序列化为
字符串映射->字符串
。我使用GSON 2.2.2和Scala 2.10

import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

object MyTest {
  def main(args: Array[String]) {
    val gson = new Gson
    val jsonString = "{\"test1\": \"value-test1\",\"test2\":\"value-test2\"}"
    val mapType = new TypeToken[Map[String, String]] {}.getType
    val map = gson.fromJson(jsonString, mapType).asInstanceOf[Map[String, String]]
  }
}
这是在
val-map=…
行中抛出的堆栈跟踪:

Exception in thread "main" java.lang.RuntimeException: Unable to invoke no-args 
    constructor for 
    scala.collection.immutable.Map<java.lang.String, java.lang.String>.

Register an InstanceCreator with Gson for this type may fix this problem.
at com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:167)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
at com.google.gson.Gson.fromJson(Gson.java:795)
at com.google.gson.Gson.fromJson(Gson.java:761)
at com.google.gson.Gson.fromJson(Gson.java:710)
at MyTest$.main(MyTest.scala:9)
at MyTest.main(MyTest.scala)

Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
at com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:164)
... 6 more

Caused by: java.lang.InstantiationException: scala.collection.immutable.Map
at sun.misc.Unsafe.allocateInstance(Native Method)
... 12 more
线程“main”java.lang.RuntimeException中的异常:无法调用任何参数 建造师 scala.collection.immutable.Map。 为此类型向Gson注册InstanceCreator可能会解决此问题。 位于com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:167) 位于com.google.gson.internal.bind.ReflectTypeAdapterFactory$Adapter.read(ReflectTypeAdapterFactory.java:162) 位于com.google.gson.gson.fromJson(gson.java:795) 位于com.google.gson.gson.fromJson(gson.java:761) 位于com.google.gson.gson.fromJson(gson.java:710) 在MyTest$.main中(MyTest.scala:9) 在MyTest.main(MyTest.scala)上 原因:java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中 位于java.lang.reflect.Method.invoke(Method.java:597) 位于com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48) 位于com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:164) ... 还有6个 原因:java.lang.InstanceException:scala.collection.immutable.Map at sun.misc.Unsafe.allocateInstance(本机方法) ... 还有12个
那么这里出了什么问题呢?

哦,这是因为
Map
没有无参数的构造函数,我可以切换到
scala.collection.immutable.HashMap
,然后错误不会出现,但是
Map
没有值,它是完全空的。它只是一个
HashMap
,带有
serialVerionUID
,没有更多字段