型キャスト

最初に

Groovy 1.8.1 がリリースされました。
前回 Grape について書いたばかりですがデフォルトでローカルの Maven リポジトリが参照されるようになりました。
Maven リポジトリを参照する設定を追加しただけならもう設定ファイルは削除してもいいです。

2種類のキャストの優先順位

次のコードでは括弧と as の優先度が低い方の型が出力されるはず。

((long) 1 as int).class

しかし、思っていた評価順と違っていた。

Java では

型キャストは優先順位が高いので先に行われる

public class Main {
  public static void main(String[] args) {
    System.out.println((int)1.9 + 1.2);  // 2.2
  }
}

Groovy では

Groovy イン・アクションの演算子の優先順位を参照すると Java と同じはずだが...

groovy:000> (int)1.9+1.2
===> 3


最初に評価したいときは括弧で最後に評価したいときは as だと思っていたのに as より後にキャストされてる*1

groovy:000> ((long) 1 as int).class
===> class java.lang.Long


検索してみたら Hit した。バグっぽい。

*1:1.8.1、1.9.1-beta で確認