JAVA8新特性详解

.1 Lambda表达式和函数式接口

它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理

最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );

java.lang.Runnablejava.util.concurrent.Callable是函数式接口的最佳例子

@FunctionalInterface
public interface FunctionalDefaultMethods {
    void method();

    default void defaultMethod() {            
    }        
}

 2.重复注解

public class RepeatingAnnotations {
    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    public @interface Filters {
        Filter[] value();
    }

    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    @Repeatable( Filters.class )
    public @interface Filter {
        String value();
    };

    @Filter( "filter1" )
    @Filter( "filter2" )
    public interface Filterable {        
    }

    public static void main(String[] args) {
        for( Filter filter: Filterable.class.getAnnotationsByType( Filter.class ) ) {
            System.out.println( filter.value() );
        }
    }
}

3.接口中的默认和静态方法

Java 8对接口进行了增强,允许接口具有已经实现了的方法。我们可以使用default 和static 关键字来创建带实现方法的接口。例如Iterable接口中的forEach方法便是一个默认方法

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}
原文地址:https://www.cnblogs.com/u013533289/p/11674614.html