【发布时间】:2019-12-19 07:30:18
【问题描述】:
我正在解析一个非常简单的 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 = obj.get("accepted_groups") // crashes
错误是 java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String 那么 println 是如何管理打印对象的呢?如何从此 LinkedHashMap 中检索数组?
【问题讨论】:
-
如何从这个 LinkedHashMap 中检索一个数组?
-
与accepted_groups 关联的实际值是一个ArrayList。但是你被告知 Kotlin 编译器 yaml.load() 将返回一个 LinkedHashMap
,其中包含字符串作为值。因此编译器向 String 插入了强制转换,因此出现了异常。您需要提供正确的泛型类型。 -
yamlLoad() 返回一个 LinkedHashMap。 val inputStream: InputStream = FileInputStream("permissions.yml") val obj = yaml.load
>(inputStream) 给出错误 class java.util.LinkedHashMap cannot be cast to class java.util.ArrayList -
虽然@AlexeyRomanov 说代码中没有演员表。那么它是如何发生 ClassCastException 的呢?
-
它返回一个地图。但是 Map 中的 values 不是您声称的字符串。其中至少有一个是 List。
标签: spring-boot kotlin