https://blogs.oracle.com/darcy/entry/functional_interfaces
Project Lambdaの一環で、JSR 335専門家グループとの議論の結果、
FunctionalInterface
アノテーションを追加することになりました。Project Lambda一次近似に対しては、関数型インターフェースは単一のメソッドのみを定義するインターフェースタイプなので、lambda式で利用できます。(genericsに関連する関数型インターフェースの定義にはトリッキーな部分があり、
http://openjdk.java.net/projects/lambda/
Request for review: proposal for @FunctionalInterface checking
http://mail.openjdk.java.net/pipermail/lambda-libs-spec-experts/2012-December/000846.html
8005298 : Add FunctionalInterface type to the core libraries
http://bugs.sun.com/view_bug.do?bug_id=8005298
java.lang.Object
で定義されたconsiderationメソッドから除外することに関する詳細もあります)。新しいアノテーション型を使うと、ライブラリの設計者は、将来そのプロパティをtrueに保つという暗黙の約束と共に、ラムダ式で使用されるインターフェイスタイプを意味するプロパティを明確に示すことができます。しかしコンパイラを使えば、インターフェースが@FunctionalInterface
アノテーションを持っているかどうかに関わらず、関数型インターフェースの構造的特性に適合する任意のインターフェイス型をラムダ式で使うことができます。java.util.function
パッケージに追加されたこれらの型は、関数型インターフェースの設計によるものであり、初期の頃から@FunctionalInterface
アノテーションをつけることができますが、多くの既存のJava SEにある型は関数型インターフェイスでもあるので、これらも同様に識別し、適切な注釈をつけたいと考えています。アノテーションをつける候補のインタフェースを見つけるため、JDK7でCloseable
な候補を見つける方法を使い、コード上でannotation processorを実行しました。Annotation ProcessorJDK全体で非常に多くの候補が見つかりました。議論と検討を経て、コアのライブラリに対する変更を要求しました。
https://blogs.oracle.com/darcy/resource/src/FunctionalFinder.java
Project Coin: Bringing it to a Close(able)
https://blogs.oracle.com/darcy/entry/project_coin_bring_close
JDK 8 code review request for 8005298 Add FunctionalInterface type to the core libraries類似の議論は2D、AWT、Swingにおいても始まっています。
http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-January/013449.html
ChangeSet (8005623: Retrofit FunctionalInterface annotations to core platform interfaces)
http://hg.openjdk.java.net/jdk8/tl/jdk/rev/522fb3867a3a
[OpenJDK 2D-Dev] 2D-related types that are candidates to be FunctionalInterfaces in JDK 8
http://mail.openjdk.java.net/pipermail/2d-dev/2013-February/003022.html
<AWT Dev> awt-related types that are candidates to be FunctionalInterfaces in JDK 8
http://mail.openjdk.java.net/pipermail/awt-dev/2013-February/004213.html
<Swing Dev> Swing and imageio-related types that are candidates to be FunctionalInterfaces in JDK 8
http://mail.openjdk.java.net/pipermail/swing-dev/2013-February/002535.html
@FunctionalInterface
を既存の型に組み込む際のガイドですが、匿名クラスを使ってインスタンスを作成することが一般的な型の場合は、@FunctionalInterface
でアノテーションする候補になり得ます。
0 件のコメント:
コメントを投稿