(Java) Lambda使っていい感じにMapとかClass生成できるやつ書いた
MapとかPOJO作るのに疲弊してきた
疲弊しすぎて、イライラして書いた。
https://github.com/be-hase/lamtils
Lambda使ってこんな感じで、さっくりと作れる。
例) HashMap :
Map<String, Object> map = Lamtils.newHashMap( one -> "one", two -> 2, three -> new Date(), four -> 4.0 );
よっしゃ!なんかLL言語っぽい感じになったぞ!
例) POJO(JavaBeans) : setter実装していないと駄目
public static class TestPojo { private String one; private int two; private Date three; private double four; private boolean five; // setter, getterは省略 } TestPojo pojo1 = Lamtils.newClass( TestPojo.class, one -> "one", two -> 2, three -> now, four -> 4.0, five -> true ); // もちろん指定したやつだけセットできる TestPojo pojo2 = Lamtils.newClass( TestPojo.class, one -> "one" );
よっしゃ!なんかGroovyとかScalaのあれっぽくなったぞ!
でもTestPojo.classって指定するのがダルい。 本気でやるならlombokみたいにしたい。
注意(重要)
- リフレクション使ってるので速くない。
- テストコードに使用するくらいなら、良いかも。
- javac optionsに"-parameters"って付けないと駄目。(面倒くさい)
- gradleなら、build.gradleに書いてあるようにcompile(Test)Java.options. compilerArgsあたりに"-parameters"いれれば良い
- ref : https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javac.html
- ref : Executable (Java Platform SE 8)
結論
冷静に頭を冷やした結果、これからもGuavaのImmutableMap.of(...)とか、lombokの@Builderとか@Accessorsのfluentとか使って頑張る。
でも、こういう記法ができるってのはなんだか可能性を感じた。
なんか他にも応用できるといいなぁ。