Groovyの残念感

これを残念言ったらおしまいな気もするけど。Groovyの場合,あえて型を指定する事で,多少の厳密さを示す事はできる。たとえばIntelliJの場合,こんな風に型無しと型ありでプロパティやメソッドの存在チェックをしてくれる(testTypeSafe()中のf.nameに波線ついてないのに注目)。


型指定したからといってgroovycが厳密な型チェックをしてくれるかというと,さにあらず。エディタ上では,hoge()メソッドがFileクラスには存在しないことをマークしてくれるけど,普通にコンパイルできて,実行時にコケる。


それも仕方が無い事で,メタ情報としてmethodMissingやpropertyMissingを持っているから,いくら型指定をしたからと言ってJava並みの型チェックをコンパイル時に行うのは無理な相談ってことだ。
試しに,こんなコードを加えると,普通に実行される。

  static {
    File.metaClass.methodMissing << { String name, Object args ->
      println "${name}(${args}"
    }
  }


こりゃ仕方ないっつうか,Groovyにしてみりゃ至極当然な事だよね。ここはむしろIntelliJのデキの良さを褒めよう。:-)