java8新特性

最后发布时间:2020-12-21 15:45:38 浏览量:
  • Lambda 表达式:Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
  • 方法引用:方法引用提供了非常有用的语法,可以直接引用已有Java类或对象的方法或构造器``
  • 函数式接口:
  • 默认方法:默认方法就是一个在接口里面有了一个实现的方法。
  • Stream API:新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
  • Date Time API:加强对日期与时间的处理。
  • Optional 类:Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异

Lambda 表达式

定义接口

interface MathOperation {
    int operation(int a, int b);
    default String fun(){
        return "Hello";
    }
}
 public static void test2(){
        MathOperation addition = (int a, int b) -> a + b;
        System.out.println(addition.operation(10,20));
        MathOperation addition2 = new MathOperation() {
            @Override
            public int operation(int a, int b) {
                return a+b;
            }
        };
        System.out.println(addition2.fun());
        System.out.println(addition2.operation(10,20));
        // 不用类型声明
        MathOperation subtraction = (a, b) -> a - b;
        // 大括号中的返回语句
        MathOperation multiplication = (int a, int b) -> { return a * b; };
        // 没有大括号及返回语句
        MathOperation division = (int a, int b) -> a / b;
    }
 public static int operate(int a, int b, MathOperation mathOperation){
        return mathOperation.operation(a, b);
    }
    public int add(int a,int b){
        return a+b;
    }
    public static void test1(){
        int operate1 = operate(10, 10, (a, b) -> a + b);
        System.out.println(operate1);
        int operate2 = operate(50, 50, new TestLambda()::add);
        System.out.println(operate2);
    }

方法引用

@FunctionalInterface
public interface Supplier<T> {
    T get();
}
class NodeRenderingHandler<N extends Object> {
    public NodeRenderingHandler(Class<N> aClass,  NodeRenderingHandler.CustomNodeRenderer<N> adapter) {

    }

    public void render(Object node, String s) {

    }

    public interface CustomNodeRenderer<N extends Object>  {
        void render(N var1, String var3);
    }
}

public class Tesr4 {
    public void test(){
        new NodeRenderingHandler<>(String.class, new NodeRenderingHandler.CustomNodeRenderer<String>() {
            @Override
            public void render(String var1, String var3) {

            }
        });
    }
    public void test1(){
        new NodeRenderingHandler<>(String.class, (var1, var3) -> {

        });
    }
    public void test2(){
        new NodeRenderingHandler<>(Integer.class, new NodeRenderingHandler.CustomNodeRenderer<Integer>() {
            @Override
            public void render(Integer var1, String var3) {
                
            }
        });
    }
}

参考:
https://www.runoob.com/java/java8-new-features.html