如何将我的YAML文件加载到案例类中?

问题描述 投票:1回答:1

我有一个Scala应用程序需要读入Yaml文件并将其加载到Scala案例类中。我正在使用snakeyaml来完成这项工作,但似乎load函数不能使用我的case类的构造函数。以下是我正在做的一个例子:

Yaml文件:

name: "Jon"
age: 50
gender: "male"

案例分类:

final case class Person(
    name: String, 
    age: Int,
    gender: String
)

提取和加载YAML的代码:

val text: String = scala.io.Source.fromFile(file).mkString
val yaml = new Yaml(new Constructor(implicitly[ClassTag[T]].runtimeClass))
yaml.load(text).asInstanceOf[T]

我收到以下错误:

 org.yaml.snakeyaml.constructor.ConstructorException: Can't construct a java object for tag:yaml.org,2002:case_classes.Person; exception=java.lang.InstantiationException: NoSuchMethodException:case_classes.Person.<init>()

我该怎么办,摆脱错误?

java scala reflection case-class snakeyaml
1个回答
1
投票

显然错误是因为Snakeyaml尝试调用no-args构造函数,然后使用setter设置所有属性。

这将永远不会与Scala qazxsw poi一起使用,因为他们既没有no-args构造函数也没有setter。 qazxsw poi。

对于解决方法,您可以使用case class

© www.soinside.com 2019 - 2024. All rights reserved.