Lambda is a new feature in Open JDK 8. Could you give some explanation about Lambda and FunctionalInterface annotation usage in AWT/Swing?

Here are some statements that can be correct or not (I am not an expert in JDK lambda):

  1. It is good practice to use Lambda for the AWT/Swing listeners:
         button.addActionListener(e -> ui.dazzle(e.getModifiers()));
      http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

2. Adding FunctionalInterface annotation allows the compiler to check that the interface has only one abstract method. However, all works in the same way if an interface does not have the FunctionalInterface annotation.

3. Users should care about Swing classes usage in Lambda methods invoked in in parallel because Swing classes should be updated from ETD.

May be something else that could give better understanding of the Lambda features usage in AWT/Swing and how Swing should be adopted for the Lambda?

  Thanks,
  Alexandr.


On 2/12/2013 4:31 AM, Joseph Darcy wrote:
And to be clear, my expectation is that the swing team will carry through on the remainder of the work need to add the annotation to appropriate swing types.

-Joe

On 2/11/2013 2:23 PM, Brian Goetz wrote:
There is no automagic use of parallelism as part of either the Lambda language features or new libraries. All parallelism is explicit (though unobtrusive). So I think this comment optimizes down to "" :)

On 2/11/2013 5:21 PM, Phil Race wrote:
Joe,

Note that Swing is a single threaded API. You can't update the UI from
any thread other than the EDT.
Where any automatic usage of processing in parallel from additional threads is performed by the lambda implementation it will violate that requirement.
So you should be circumspect in tagging Swing classes.

-phil.

On 2/5/2013 2:41 PM, 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 swing team in adding analogous annotations to your
types, the list of candidate types in for swing and imageio-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
swing types.

Thanks,

-Joe

[1]
http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-February/014292.html


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/swing/TransferHandler.java:128: Note:
Candidate functional interface
    interface HasGetTransferHandler {
    ^
jdk/src/share/classes/javax/swing/tree/TreeCellRenderer.java:42: Note:
Candidate functional interface
public interface TreeCellRenderer {
       ^
jdk/src/share/classes/javax/swing/tree/RowMapper.java:36: Note:
Candidate functional interface
public interface RowMapper
       ^
jdk/src/share/classes/javax/swing/table/TableCellRenderer.java:38:
Note: Candidate functional interface
public interface TableCellRenderer {
       ^
jdk/src/share/classes/javax/swing/event/ChangeListener.java:36: Note:
Candidate functional interface
public interface ChangeListener extends EventListener {
       ^
jdk/src/share/classes/javax/swing/event/HyperlinkListener.java:35:
Note: Candidate functional interface
public interface HyperlinkListener extends EventListener {
       ^
jdk/src/share/classes/javax/swing/event/RowSorterListener.java:34:
Note: Candidate functional interface
public interface RowSorterListener extends java.util.EventListener {
       ^
jdk/src/share/classes/javax/swing/event/CaretListener.java:36: Note:
Candidate functional interface
public interface CaretListener extends EventListener {
       ^
jdk/src/share/classes/javax/swing/event/ListSelectionListener.java:41:
Note: Candidate functional interface
public interface ListSelectionListener extends EventListener
       ^
jdk/src/share/classes/javax/swing/event/UndoableEditListener.java:37:
Note: Candidate functional interface
public interface UndoableEditListener extends java.util.EventListener {
       ^
jdk/src/share/classes/javax/swing/event/TableModelListener.java:38:
Note: Candidate functional interface
public interface TableModelListener extends java.util.EventListener
       ^
jdk/src/share/classes/javax/swing/event/TreeSelectionListener.java:43:
Note: Candidate functional interface
public interface TreeSelectionListener extends EventListener
       ^
jdk/src/share/classes/javax/swing/ListCellRenderer.java:89: Note:
Candidate functional interface
public interface ListCellRenderer<E>
       ^
jdk/src/share/classes/javax/swing/text/html/CSSBorder.java:257: Note:
Candidate functional interface
    interface BorderPainter {
    ^
jdk/src/share/classes/javax/swing/text/html/Map.java:234: Note:
Candidate functional interface
    interface RegionContainment {
    ^
jdk/src/share/classes/javax/swing/text/TabExpander.java:34: Note:
Candidate functional interface
public interface TabExpander {
       ^
jdk/src/share/classes/javax/swing/text/ViewFactory.java:36: Note:
Candidate functional interface
public interface ViewFactory {
       ^
jdk/src/share/classes/javax/swing/text/Position.java:49: Note:
Candidate functional interface
public interface Position {
       ^
jdk/src/share/classes/javax/swing/text/Highlighter.java:112: Note:
Candidate functional interface
    public interface HighlightPainter {
           ^
jdk/src/share/classes/javax/swing/Painter.java:63: Note: Candidate
functional interface
public interface Painter<T> {
       ^
jdk/src/share/classes/javax/swing/plaf/basic/DragRecognitionSupport.java:52:
Note: Candidate functional interface
    public static interface BeforeDrag {
                  ^
jdk/src/share/classes/javax/swing/UIDefaults.java:951: Note: Candidate
functional interface
    public interface LazyValue {
           ^
jdk/src/share/classes/javax/swing/UIDefaults.java:984: Note: Candidate
functional interface
    public interface ActiveValue {
           ^
jdk/src/share/classes/javax/swing/JComboBox.java:1484: Note: Candidate
functional interface
    public interface KeySelectionManager {
           ^
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 {



Reply via email to