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
  */
-@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
  */
-@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
  */
-@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
  */
-@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
  */
-@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
  */
-@FunctionalInterface
 public interface Readable {

     /**

Reply via email to