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) {
}
});
}
}