Of these, the only one I might question is Iterable. While it is commonly used as a mixin like Closeable or Flushable, unlike the others, Iterables also make sense to stand on their own, and there are some libraries that truck entirely in Iterable to perform stream-like behavior (being the least-common-denominator "access to elements" type.) But, I can go either way on this.

On 10/21/2013 2:16 PM, Joe Darcy wrote:
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