<AWT Dev> awt-related types that are candidates to be FunctionalInterfaces in JDK 8

Joe Darcy joe.darcy at oracle.com
Wed Feb 6 21:31:47 PST 2013


Hi Artem,

On 02/06/2013 06:55 AM, Artem Ananiev wrote:
> Hi, Joe,
>
> could you provide more information about the FunctionalInterface 
> annotation, please? In particular, what are benefits of adding and not 
> adding it to certain API interfaces?

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 approximately, 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 structure requirements of a functional interface to be 
used in a lambda expression; the annotation provides documentation of 
intent.

HTH,

-Joe

>
> The list of candidate types below looks reasonable with a few exceptions:
>
> - SystemTrayPeer is a peer interface that is not meant to be used nor 
> implemented by applications.
>
> - Transparency is mostly a tagging interface and a container for 3 
> constants, I wouldn't expect it in lambda expressions.
>
> - PrintGraphics has a single implementation, and I don't expect more 
> to appear.
>
> - Composite and Stroke are Java2D classes, you would better ask 2D 
> experts about them. To me, both are internal JDK interfaces that are 
> of no interest for applications.
>
> Thanks,
>
> Artem
>
> On 2/6/2013 2:41 AM, Joe 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].
>>
>> To assist the awt team in adding analogous annotations to your types,
>> the list of candidate types in for awt-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 awt types.
>>
>> Thanks,
>>
>> -Joe
>>
>> [1]
>> http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-February/014292.html 
>>
>>
>>
>> jdk/src/share/classes/java/awt/Transparency.java:36: Note: Candidate
>> functional interface
>> public interface Transparency {
>>         ^
>> jdk/src/share/classes/java/awt/EventFilter.java:27: Note: Candidate
>> functional interface
>> interface EventFilter {
>> ^
>> jdk/src/share/classes/java/awt/event/AdjustmentListener.java:36: Note:
>> Candidate functional interface
>> public interface AdjustmentListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/event/MouseWheelListener.java:51: Note:
>> Candidate functional interface
>> public interface MouseWheelListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/event/TextListener.java:46: Note:
>> Candidate functional interface
>> public interface TextListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/event/WindowStateListener.java:50: Note:
>> Candidate functional interface
>> public interface WindowStateListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/event/ItemListener.java:47: Note:
>> Candidate functional interface
>> public interface ItemListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/event/HierarchyListener.java:49: Note:
>> Candidate functional interface
>> public interface HierarchyListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/event/AWTEventListener.java:55: Note:
>> Candidate functional interface
>> public interface AWTEventListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/event/ActionListener.java:45: Note:
>> Candidate functional interface
>> public interface ActionListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/print/Printable.java:105: Note: Candidate
>> functional interface
>> public interface Printable {
>>         ^
>> jdk/src/share/classes/java/awt/print/PrinterGraphics.java:36: Note:
>> Candidate functional interface
>> public interface PrinterGraphics {
>>         ^
>> jdk/src/share/classes/java/awt/KeyEventPostProcessor.java:57: Note:
>> Candidate functional interface
>> public interface KeyEventPostProcessor {
>>         ^
>> jdk/src/share/classes/java/awt/peer/SystemTrayPeer.java:35: Note:
>> Candidate functional interface
>> public interface SystemTrayPeer {
>>         ^
>> jdk/src/share/classes/java/awt/ActiveEvent.java:52: Note: Candidate
>> functional interface
>> public interface ActiveEvent {
>>         ^
>> 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/dnd/DragSourceMotionListener.java:53:
>> Note: Candidate functional interface
>> public interface DragSourceMotionListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/dnd/DragGestureListener.java:48: Note:
>> Candidate functional interface
>>   public interface DragGestureListener extends EventListener {
>>          ^
>> jdk/src/share/classes/java/awt/PrintGraphics.java:33: Note: Candidate
>> functional interface
>> public interface PrintGraphics {
>>         ^
>> jdk/src/share/classes/java/awt/Stroke.java:58: Note: Candidate
>> functional interface
>> public interface Stroke {
>>         ^
>> jdk/src/share/classes/java/awt/datatransfer/ClipboardOwner.java:44:
>> Note: Candidate functional interface
>> public interface ClipboardOwner {
>>         ^
>> jdk/src/share/classes/java/awt/datatransfer/FlavorListener.java:36:
>> Note: Candidate functional interface
>> public interface FlavorListener extends EventListener {
>>         ^
>> jdk/src/share/classes/java/awt/KeyEventDispatcher.java:54: Note:
>> Candidate functional interface
>> public interface KeyEventDispatcher {
>>         ^
>> jdk/src/share/classes/java/awt/Container.java:2440: Note: Candidate
>> functional interface
>>      static interface EventTargetFilter {
>>             ^
>> jdk/src/share/classes/java/awt/Composite.java:68: Note: Candidate
>> functional interface
>> public interface Composite {
>>         ^
>> jdk/src/share/classes/java/awt/Conditional.java:35: Note: Candidate
>> functional interface
>> interface Conditional {
>> ^
>>




More information about the awt-dev mailing list