Kotlin从LinkedHashMap <String,String>转换为String?

时间:2019-12-19 07:30:18

标签: 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 = obj.get("accepted_groups") // crashes

错误是java.lang.ClassCastException:无法将类java.util.ArrayList强制转换为类java.lang.String 那么println如何管理打印对象?如何从此LinkedHashMap检索数组?

1 个答案:

答案 0 :(得分:1)

问题是您的YAML文件中的值不是(所有)字符串。即看起来像

accepted_groups:
    - A
    - B

不是

accepted_groups: "[A, B]"

因此LinkedHashMap<String, String>只是使用错误的类型。 正确的类型是什么,不知道就不能说:

  1. 文件的实际结构;

  2. 哪个库Yaml类来自(不是Kotlin标准库,也不是您在标签中提到的Spring Boot)。

LinkedHashMap<String, Any>可能会起作用,但不是最佳选择。

  

那么println如何管理打印对象?

通过调用toString,就像对任何对象一样。

问题

val group = obj.get("accepted_groups")

是通过使用LinkedHashMap<String, String>group推断的类型为String,但实际存储的值不是。