Groovyのtraitでimplementsする側に@CompileStatic
をつけた場合に、trait由来のコードに@CompileStatic
の効果が出るのか気になったので、groovyConsoleのFinalizationのバイトコードを確認してみた。
結論として、CallSiteとか使われなくなるし、「効率的なバイトコードになってる」ようなんだけど、ちょっとまだよくわかってない。
trait側のint
型へのキャストを無くしたバージョンでMyTrait
に@CompileStatic
をつけると、型チェック違反でコンパイルエラーになるんだけど(期待通り)、
MyTrait
じゃなくてMyClass
側に@CompileStatic
をつけた場合、型チェック違反にはならなかった。
なのに、効率的なコードになるというのどういうことなのかしら。