[OpenJDK 2D-Dev] 2D-related types that are candidates to be FunctionalInterfaces in JDK 8
Joseph Darcy
joe.darcy at oracle.com
Tue Feb 12 01:01:29 UTC 2013
Hi Phil,
On 2/11/2013 2:21 PM, Phil Race wrote:
> Joe,
>
> |What were the criteria used to identify candidates?
> It looks like its finding a public API interface with a
> single abstract method.
>
To a first approximation, that is correct. I ran an annotation processor
over the sources in the jdk repo looking for interfaces which meet the
structural definition of a functional interface. The summary of that
definition is "defines one method," but there are complications in the
full definition that are accounted for in the checks I ran.
> |My sense is that many of the ones identified are not ones
> that would be appropriate for lambda expressions.
>
> The pattern that would seem most useful is where the application
> will need to iterate over a collection of these in parallel, is that
> correct ?
Not necessary. The guidance I would given is that candidate interfaces
that are routinely instantiated today using anonymous classes should be
annotated with @FunctionalInterface. Note that a compiler will allow
one to use any type that meets the structural definition of a functional
interface in a lambda expression; adding the @FunctionalInterface
annotation just documents intent.
> Some, like Printable, could not be properly used like that.
> Maybe some of the listeners/observers might match the pattern
> that there could be multiple of these that might need to be notified
> but in reality there will usually be zero, sometimes one.
>
> Perhaps the most likely candidate I see is ServiceRegistry.Filter|||.
> |
> BTW The decoder ring is here :- http://openjdk.java.net/groups/2d/
> under "Regarding Java 2D's source code".
> and there's a link there to additional info here :
> http://openjdk.java.net/groups/2d/2dawtfiles.html
Thanks for the pointer,
-Joe
>
> -phil.
>
>
> On 2/8/2013 4:11 PM, Joseph Darcy wrote:
>> Hello,
>>
>> As part of Project Lambda, a FunctionalInterface annotation type was
>> added to the platform to mark interfaces that are intended to be used
>> in lambda expressions. I've sent out a code review request to add
>> this annotation to types in the core-libs area [1] and have just
>> pushed the changeset into TL [2].
>>
>> To assist the 2D team in adding analogous annotations to your types,
>> the list of candidate types in for 2D-related classes in java.* and
>> javax.* is given below. I recommend sub-tasks of JDK-8005297 "Add
>> FunctionalInterface support to the platform" be used to track the
>> work of adding @FunctionalInterface annotations to 2D types
>>
>> In terms of how the annotation should be used, the benefit of the
>> annotation is that is clearly documents the type is intended to be
>> used for lambda expressions and is unlikely to evolve such that is
>> cannot be used with lambda expressions.
>>
>> To a first approximation, if a candidate type today is commonly
>> created using anonymous inner classes, it is reasonable to add the
>> functionalInterface annotation. Note that the compiler will allow
>> any type meeting the structural requirements of a functional
>> interface to be
>> used in a lambda expression; the annotation just provides
>> documentation of intent.
>>
>> Having misplaced my 2D vs AWT vs Swing decoder ring, consideration of
>> these 2D types was previously sent to other aliases [3] [4].
>
>>
>> Thanks,
>>
>> -Joe
>>
>> [1]
>> http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-February/014292.html
>>
>>
>> [2] http://hg.openjdk.java.net/jdk8/tl/jdk/rev/522fb3867a3a
>>
>> [3]
>> http://mail.openjdk.java.net/pipermail/awt-dev/2013-February/004213.html
>>
>> [4]
>> http://mail.openjdk.java.net/pipermail/swing-dev/2013-February/002535.html
>>
>> -=-=-=-=-
>>
>> jdk/src/share/classes/java/awt/Stroke.java:58: Note: Candidate
>> functional interface
>> public interface Stroke {
>> ^
>>
>> jdk/src/share/classes/java/awt/image/TileObserver.java:39: Note:
>> Candidate functional interface
>> public interface TileObserver {
>>
>> jdk/src/share/classes/java/awt/image/ImageObserver.java:40: Note:
>> Candidate functional interface
>> public interface ImageObserver {
>> ^
>> jdk/src/share/classes/java/awt/image/renderable/RenderedImageFactory.java:47:
>> Note: Candidate functional interface
>> public interface RenderedImageFactory {
>> ^
>> jdk/src/share/classes/java/awt/image/TileObserver.java:39: Note:
>> Candidate functional interface
>> public interface TileObserver {
>>
>> jdk/src/share/classes/java/awt/print/Printable.java:105: Note:
>> Candidate functional interface
>> public interface Printable {
>> ^
>> jdk/src/share/classes/java/awt/PrintGraphics.java:33: Note: Candidate
>> functional interface
>> public interface PrintGraphics {
>> ^
>> jdk/src/share/classes/javax/print/FlavorException.java:39: Note:
>> Candidate functional interface
>> public interface FlavorException {
>> ^
>> jdk/src/share/classes/javax/print/event/PrintServiceAttributeListener.java:37:
>> Note: Candidate functional interface
>> public interface PrintServiceAttributeListener {
>> ^
>> jdk/src/share/classes/javax/print/event/PrintJobAttributeListener.java:34:
>> Note: Candidate functional interface
>> public interface PrintJobAttributeListener {
>> ^
>> jdk/src/share/classes/javax/imageio/IIOParamController.java:99: Note:
>> Candidate functional interface
>> public interface IIOParamController {
>> ^
>> jdk/src/share/classes/javax/imageio/event/IIOWriteWarningListener.java:46:
>> Note: Candidate functional interface
>> public interface IIOWriteWarningListener extends EventListener {
>> ^
>> jdk/src/share/classes/javax/imageio/event/IIOReadWarningListener.java:46:
>> Note: Candidate functional interface
>> public interface IIOReadWarningListener extends EventListener {
>> ^
>> jdk/src/share/classes/javax/imageio/metadata/IIOMetadataController.java:67:
>> Note: Candidate functional interface
>> public interface IIOMetadataController {
>> ^
>> jdk/src/share/classes/javax/imageio/spi/ServiceRegistry.java:464:
>> Note: Candidate functional interface
>> public interface Filter {
>>
>>
>
More information about the 2d-dev
mailing list