JDK 8 RFR for JDK-8022658: Revisit FunctionalInterface on some core libs types

Joe Darcy joe.darcy at oracle.com
Mon Oct 21 18:16:22 UTC 2013


Hello,

Earlier in JDK 8, various core library classes were annotated with the 
@FunctionalInterface annotation (JDK-8005623 Retrofit 
FunctionalInterface annotations to core platform interfaces). As 
experience has been gained with the feature, the time has come to 
revisit some of those annotations under issue

     JDK-8022658: Revisit FunctionalInterface on some core libs types

In brief, I propose removing @FunctionalInterface from the following six 
types:

  src/share/classes/java/io/Closeable.java
  src/share/classes/java/io/Flushable.java
  src/share/classes/java/lang/AutoCloseable.java
  src/share/classes/java/lang/Comparable.java
  src/share/classes/java/lang/Iterable.java
  src/share/classes/java/lang/Readable.java

In these cases, the single method of the interface is more so a 
mix-in/trait like feature and not readily usable standalone in a lambda 
expression. Patch below.

Thanks,

-Joe

diff -r 698baf22e081 src/share/classes/java/io/Closeable.java
--- a/src/share/classes/java/io/Closeable.java    Mon Oct 21 13:57:11 
2013 +0200
+++ b/src/share/classes/java/io/Closeable.java    Mon Oct 21 11:15:17 
2013 -0700
@@ -34,7 +34,6 @@
   *
   * @since 1.5
   */
- at FunctionalInterface
  public interface Closeable extends AutoCloseable {

      /**
diff -r 698baf22e081 src/share/classes/java/io/Flushable.java
--- a/src/share/classes/java/io/Flushable.java    Mon Oct 21 13:57:11 
2013 +0200
+++ b/src/share/classes/java/io/Flushable.java    Mon Oct 21 11:15:17 
2013 -0700
@@ -34,7 +34,6 @@
   *
   * @since 1.5
   */
- at FunctionalInterface
  public interface Flushable {

      /**
diff -r 698baf22e081 src/share/classes/java/lang/AutoCloseable.java
--- a/src/share/classes/java/lang/AutoCloseable.java    Mon Oct 21 
13:57:11 2013 +0200
+++ b/src/share/classes/java/lang/AutoCloseable.java    Mon Oct 21 
11:15:17 2013 -0700
@@ -48,7 +48,6 @@
   * @author Josh Bloch
   * @since 1.7
   */
- at FunctionalInterface
  public interface AutoCloseable {
      /**
       * Closes this resource, relinquishing any underlying resources.
diff -r 698baf22e081 src/share/classes/java/lang/Comparable.java
--- a/src/share/classes/java/lang/Comparable.java    Mon Oct 21 13:57:11 
2013 +0200
+++ b/src/share/classes/java/lang/Comparable.java    Mon Oct 21 11:15:17 
2013 -0700
@@ -93,7 +93,6 @@
   * @see java.util.Comparator
   * @since 1.2
   */
- at FunctionalInterface
  public interface Comparable<T> {
      /**
       * Compares this object with the specified object for order. Returns a
diff -r 698baf22e081 src/share/classes/java/lang/Iterable.java
--- a/src/share/classes/java/lang/Iterable.java    Mon Oct 21 13:57:11 
2013 +0200
+++ b/src/share/classes/java/lang/Iterable.java    Mon Oct 21 11:15:17 
2013 -0700
@@ -42,7 +42,6 @@
   * @since 1.5
   * @jls 14.14.2 The enhanced for statement
   */
- at FunctionalInterface
  public interface Iterable<T> {
      /**
       * Returns an iterator over elements of type {@code T}.
diff -r 698baf22e081 src/share/classes/java/lang/Readable.java
--- a/src/share/classes/java/lang/Readable.java    Mon Oct 21 13:57:11 
2013 +0200
+++ b/src/share/classes/java/lang/Readable.java    Mon Oct 21 11:15:17 
2013 -0700
@@ -34,7 +34,6 @@
   *
   * @since 1.5
   */
- at FunctionalInterface
  public interface Readable {

      /**




More information about the core-libs-dev mailing list