home Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive)

Java/Java8u60でのラムダ式引数名のリフレクション対応を活用したクールなMapビルダーの参考URLメモ

作成日: 2019-01-02 18:52:57   /   last updated at: 2019-01-02 18:53:14
カテゴリ: Java 

参考:

何ができるようになるか?:

    @Test
    public void java_hash_literal() {
        Map<String, String> hash = hash(
            hello -> "world",
            bob -> bob,
            bill -> "was here"
        );

        assertEquals("world", hash.get("hello"));
        assertEquals("bob", hash.get("bob"));
        assertEquals("was here", hash.get("bill"));
    }

    public static <T> Map<String, T> hash(NamedValue<T>... keyValuePairs) {
        Map<String, T> map = new HashMap<>();
        asList(keyValuePairs)
            .stream()
            .forEach(kvp ->
                map.put(
                    kvp.name(),
                    kvp.value())
                );
        return map;
    }

(via : https://github.com/benjiman/lambda-type-references/blob/master/src/test/java/com/benjiweber/HashLiteralExample.java )

なんとなくしか理解してないが、ラムダ式の引数名をリフレクションで取り出せるようになったのを活用して、key -> value をラムダ式に見立てれば、key をラムダ式の引数名として取り出せるよね、それでクールなMapビルダー作れたよ!という話らしい。
まぁ空白とか記号混じりは厳しそうなのである程度制限はあると思うが、アイデアとしては面白い。

・・・まぁ、これ使うくらいならドメイン特化したビルダー作るかもしれないけど・・・。


original url: https://www.glamenv-septzen.net/view/1445