Spring boot LinkedHashMap的Kotlin演员阵容<;字符串,字符串>;串?
我正在解析一个非常简单的YAML文件 这是我的密码:Spring boot LinkedHashMap的Kotlin演员阵容<;字符串,字符串>;串?,spring-boot,kotlin,Spring Boot,Kotlin,我正在解析一个非常简单的YAML文件 这是我的密码: val yaml = Yaml() val inputStream: InputStream = FileInputStream("permissions.yml") val obj = yaml.load<LinkedHashMap<String, String>>(inputStream) println(obj.get("accepted_groups")) // prints [A, B] val group
val yaml = Yaml()
val inputStream: InputStream = FileInputStream("permissions.yml")
val obj = yaml.load<LinkedHashMap<String, String>>(inputStream)
println(obj.get("accepted_groups")) // prints [A, B]
val group = obj.get("accepted_groups") // crashes
val yaml=yaml()
val inputStream:inputStream=FileInputStream(“permissions.yml”)
val obj=yaml.load(输入流)
println(obj.get(“接受的组”)//prints[A,B]
val group=obj.get(“已接受的组”)//崩溃
错误为java.lang.ClassCastException:无法将类java.util.ArrayList转换为类java.lang.String
那么println是如何打印对象的呢?如何从此LinkedHashMap检索数组?问题在于YAML文件中的值不是(全部)字符串。也就是说,它看起来像
accepted_groups:
- A
- B
不是
因此,LinkedHashMap
只是使用了错误的类型。
什么是正确的类型,不知道就不能说:
Yaml
类来自(它不是Kotlin标准库,也不是您在标签中提到的Spring Boot)LinkedHashMap
可能会起作用,但不是最佳选择
那么println是如何打印对象的呢
通过调用toString
,就像调用任何对象一样
问题在于
val group = obj.get("accepted_groups")
通过使用
LinkedHashMap
为group
推断的类型是String
,但存储在那里的实际值不是 如何从此LinkedHashMap检索数组?与接受的组关联的实际值是ArrayList。但是您被告知Kotlin编译器yaml.load()将返回一个LinkedHashMap,其中包含字符串作为值。因此,编译器会将强制转换插入字符串,因此出现异常。您需要提供正确的泛型类型。yamlLoad()返回LinkedHashMap。val inputStream:inputStream=FileInputStream(“permissions.yml”)val obj=yaml.load(inputStream)给出了错误类java.util.LinkedHashMap不能转换为类java.util.Arraylistals,尽管@AlexeyRomanov说代码中没有转换。那么它是如何成为ClassCastException的呢?它返回一个映射。但是映射中的值不是您所声称的字符串。其中至少有一个是列表。
val group = obj.get("accepted_groups")