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

Brian Goetz brian.goetz at oracle.com
Mon Oct 21 18:47:34 UTC 2013


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
>    */
> - 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