2016/12/08の30分 Kotlinメモ🍟
2016/12/08の30分 Kotlinメモ🍟
書いてるコードは雑にここにあります。
Function Literals with Receiver
なんかこんなコード書いてみたけど、便利そうだけどよくわからねー
class Hello { fun world() { println("Hello,world") } } fun hello(init: Hello.() -> Unit): Hello { val h = Hello() h.init() return h } hello { world() world() }
以下とかちゃんと読めばわかるのかな?
by - Delegated Properties
便利そうー
所持しているオブジェクトに単に委譲するだけのメソッドを作る必要がなくなる。
interface Base { fun println() fun hoho(a: String): String } class BaseImpl(val x: Int) : Base { override fun hoho(a: String): String { return a.toUpperCase() } override fun println() { println(x) } } // by を使ってBaseインターフェースの全てのpublicメソッドをbに委譲するよう指定 // DerivedはBaseを継承はしていないけど、委譲してるので呼び出しは継承と同じ感じで呼び出せる class Derived(b: Base) : Base by b { val a = "aaaaa" fun mmmmmm() { println(hoho(a)) } } val bbbb = BaseImpl(10) val dd = Derived(bbbb) dd.println() // 10 println(dd.hoho("test")) // TEST dd.mmmmmm() // AAAAA
Javaだと大変...長い...委譲するメソッド作らないとだしねー...
interface Base { void println(); String hoho(String s); } static class BaseImpl implements Base { private final int x; public BaseImpl(int x) { this.x = x; } @Override public void println() { System.out.println(x); } @Override public String hoho(String s) { return s.toLowerCase(); } } static class Derived { private final Base b; private final String a = "aaaaa"; public Derived(Base b) { this.b = b; } public void println() { b.println(); } public String hoho(String s) { return b.hoho(s); } public void mmmmmm() { System.out.println(b.hoho(a)); } } public static void main(String[] s) { Base bbbb = new BaseImpl(10); Derived dd = new Derived(bbbb); dd.println(); System.out.println(dd.hoho("test")); dd.mmmmmm(); }
まとめ
KotlinのコードコピペしてJavaに置き換えるのめっちゃ大変...