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