[Java] Functional Interfaces

原文はこちら。
https://blogs.oracle.com/darcy/entry/functional_interfaces

Project Lambdaの一環で、JSR 335専門家グループとの議論の結果、FunctionalInterfaceアノテーションを追加することになりました。
Project Lambda
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
一次近似に対しては、関数型インターフェースは単一のメソッドのみを定義するインターフェースタイプなので、lambda式で利用できます。(genericsに関連する関数型インターフェースの定義にはトリッキーな部分があり、java.lang.Objectで定義されたconsiderationメソッドから除外することに関する詳細もあります)。新しいアノテーション型を使うと、ライブラリの設計者は、将来そのプロパティをtrueに保つという暗黙の約束と共に、ラムダ式で使用されるインターフェイスタイプを意味するプロパティを明確に示すことができます。しかしコンパイラを使えば、インターフェースが@FunctionalInterfaceアノテーションを持っているかどうかに関わらず、関数型インターフェースの構造的特性に適合する任意のインターフェイス型をラムダ式で使うことができます。

java.util.functionパッケージに追加されたこれらの型は、関数型インターフェースの設計によるものであり、初期の頃から@FunctionalInterfaceアノテーションをつけることができますが、多くの既存のJava SEにある型は関数型インターフェイスでもあるので、これらも同様に識別し、適切な注釈をつけたいと考えています。アノテーションをつける候補のインタフェースを見つけるため、JDK7でCloseableな候補を見つける方法を使い、コード上でannotation processorを実行しました。
Annotation Processor
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全体で非常に多くの候補が見つかりました。議論と検討を経て、コアのライブラリに対する変更を要求しました。
JDK 8 code review request for 8005298 Add FunctionalInterface type to the core libraries
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
類似の議論は2D、AWT、Swingにおいても始まっています。
[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 件のコメント:

コメントを投稿