所以我正在使用这段代码加载一个 YAML 文件。
String file = "A: true\nB: 5"
Yaml yaml = new Yaml();
Map settings = (Map) yaml.load(file);
System.out.println(settings.get("A"));
最后一行打印:
class java.lang.Boolean
这是预期的。但是,当我尝试实际使用布尔值时,例如使用基本的 if 语句:
if (settings.get("A")) {
System.out.println("We want to do A!");
}
此语句引发错误:
java: incompatible types
required: boolean
found: java.lang.Object
告诉我 if 语句期待一个布尔值,但收到了一个 java.lang.Object 。这让我很困惑。为什么,当我得到对象类时,它会返回我想要的类型,但该对象不能在所述类型的上下文中使用?
起初,我天真地认为这可能是因为 SnakeYAML 返回的是 Object 类型的子类,而不是原始类型。经过一些测试和少量思考后,我意识到这不是我问题的原因。
我意识到我可以通过简单地将每个值转换为其各自的类型来修复此错误,但是我的 YAML 文件包含许多不同的值,我不想在每次引用它们时手动转换它们......这有点违背了我的目的首先使用 YAML。
无论如何,深入了解为什么我不能使用一个认为它是布尔值的对象作为布尔值将不胜感激。