タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

JavaとGroovyに関するnobuokaのブックマーク (3)

  • GroovyのクロージャとJava8のlambda式の違いについて - uehaj's blog

    この両者は、似ているようでいて、基的には別モノです。表にしてみます。 Groovyのクロージャ java8のlambda式 導入時期 2003年 2014年03月 ローカル変数へのアクセス 読み書き可能 実質的にfinal(変数そのものに対しては読み込みのみ) 実装方法 Closure型のインスタンス MethodHandle, invokeDynamic.. 型推論の根拠 Closure<T>のTで返り値、@ClosureParamsで引数 FunctionalInterface(SAM型) 記法 { 引数 -> 体 } { 体 } {-> 体 } (引数) -> { 体 } (引数) -> 式 () -> { 体 } 暗黙の動的なthis delegateにより実現 - 性能 ローカル変数をenclosingするため間接参照にするためのオーバーヘッドあり 性能上のオーバーヘ

    GroovyのクロージャとJava8のlambda式の違いについて - uehaj's blog
    nobuoka
    nobuoka 2015/04/20
    『クロージャ引数を型推論させたいとき、つまり静的 Groovy をしつつ型を省略したいときは、@ClosureParamsを使う』 これ今まで知らんかった。 便利そう。
  • JDK 7u65/8u11以降に存在するバイトコード検証の不具合 - GeekFactory

    JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があります。Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()やthis()を使うと実行時エラーが発生します。 Gradle SSH Pluginでもコンストラクタ内でsuper()を実行するコードがあり、JDK 7u65/8u11以降で正常に動作しない問題があります。最近のJDKで不具合が修正されているか確認してみたのですが、やはり動作しませんでした。結果は以下の通りです。 成功 7u60-b19 失敗 7u65-b17 失敗 7u67-b01 成功 8u5-b13 失敗 8u11-b12 失敗 8u20-b26 残念ながら、GROOVY-6951 のスレッドによると8u40まで待つしかないようです。 なお、Travis CIでは当該の不具合に対する暫定対

    JDK 7u65/8u11以降に存在するバイトコード検証の不具合 - GeekFactory
    nobuoka
    nobuoka 2014/09/29
    『Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()やthis()を使うと実行時エラーが発生します。』 まじか…。
  • @DelegateでJavaバージョンの差異が顕在化するケース - GeekFactory

    JDK 8でビルドしたクラスファイルをJDK 7で実行するとClassNotFoundExceptionが発生する事象でハマったのでメモ。結論からいうと、ソースコードでJava 8に固有のクラスを直接参照していなくても、@Delegateによって間接的に参照されるケースがあります。 前提 JDK 8でのコンパイル時にsource, targetのバージョンを指定しているものとします。 そうしないと、JDK 7でクラスファイルを読み込んだ時に以下のエラーが発生します。 Exception in thread "main" java.lang.UnsupportedClassVersionError: Main : Unsupported major.minor version 52.0 Gradleでは以下の2行を書くだけでOKです。 sourceCompatibility = JavaVe

    @DelegateでJavaバージョンの差異が顕在化するケース - GeekFactory
    nobuoka
    nobuoka 2014/09/23
    Groovy コードをコンパイルする際、JDK 8 を使って Java 7 向けにコンパイルしても @Delegate アノテーションを使ってると期待通り動作しないことがあるみたい。 気を付けよう。
  • 1