エルビス演算⼦(Elvis Operator)
• 三項演算⼦
A?B:C
は次と等価
if (A) { B } else { C }
• エルビス演算⼦ ※GCCの独自拡張に由来
A ?: B
は次と等価
if (A) { A } else { B } From 1.1・1.5
エルビス演算⼦(Elvis Operator)
ジョイントコンパイラ
• GroovyとJavaコードが相互依存してい
てもコンパイル可能に
class A {
B b;
}
class B extends A {}
• 内部では、Groovyクラスのスタブ(メ
ソッド本体を削除したもの)を⽣成して
からJavaコンパイラを起動する
• groovycの-jオプションで実⾏
From 1.1・1.5
AST変換: @Singleton
@Singleton class Foo {
def hello() { println \"hello\" }
}
Foo.instance.hello() // シングルトン参照
a = new Foo() // newでインスタンス⽣成不可
ERROR
java.lang.RuntimeException: Can't
instantiate singleton Foo. Use
Foo.instance
AST変換: @Immutable
@Immutable final class Foo {
String x, y
}
a = new Foo(\"a\",\"b\")
a.x = “hoge” 値の変更
ERROR
groovy.lang.ReadOnlyPropertyExcep
tion: Cannot set readonly property:
x
0 comments
Post a comment