Jackson と同様に、値が数値、文字列、ブール値、オブジェクト (マップ) または配列 (リスト) である Map<String,Object> の JSON 構造に似た JavaScript 呼び出しの結果を取得しようとしています。値をマップに変換する場合。
Value.as(Map.class)
呼び出しを使用する場合、 Map の値がこれらのルールに従うことを期待します
未加工の Map.class または Object コンポーネント型が使用されている場合、リストの戻り値の型は Object ターゲット型マッピング規則に再帰的に従います。
ドキュメントのさらに下 (オブジェクト マッピングのルール 8)
値に配列要素があり、配列サイズが Integer.MAX_VALUE 以下の場合、結果の値は List を実装します。
ただし、このテストは失敗します
public class TestGraalMap {
static String JS_CODE = "(function myFun(){ return { listProperty: ['listValue']};})";
@Test
public void testList() {
try (Context context = Context.create()) {
Value value = context.eval("js", JS_CODE);
Value result = value.execute();
Map<String,Object> resultMap = result.as(Map.class);
assertThat(resultMap).hasEntrySatisfying("listProperty", testArray -> {
assertThat(testArray).asList().containsExactly("listValue");
});
}
}
}
次のエラーで。
Expecting:
<{}>
to be an instance of:
<java.util.List>
but was instance of:
<com.oracle.truffle.polyglot.PolyglotMap>
私は何が欠けていますか?