Interface improvements
Interfaces can now define static methods. For example, java.util.Comparator now has a static naturalOrder method.
Interfaces can now provide default methods. This allows programmers to add new methods without breaking existing code that implements the interface. For example, java.lang.Iterable now has a default forEach method.
public static <T extends Comparable<? super T>> Comparator<T> naturalOrder() { return (Comparator<T>) Comparators.NaturalOrderComparator.INSTANCE; }
Interfaces can now provide default methods. This allows programmers to add new methods without breaking existing code that implements the interface. For example, java.lang.Iterable now has a default forEach method.
public default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
Note that an interface cannot provide a default implementation for any of the methods of the Object class.
Functional interfaces
A functional interface is an interface that defines exactly one abstract method. TheFunctionalInterface annotation has been introduced to indicate that an interface is intended to be a functional interface. For example, java.lang.Runnable is a functional interface.
@FunctionalInterface public interface Runnable { public abstract void run(); }
Note that the Java compiler will treat any interface meeting the definition as a functional interface regardless of whether or not the FunctionalInterface annotation is present.
No comments:
Post a Comment