したがって、このコードを使用して 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を使用するため。
とにかく、ブール値をブール値と見なすオブジェクトを使用できない理由についての洞察をいただければ幸いです。