lambada详解-01
1、lambada表达式用在函数式接口的地方:用在有且仅有一个方法的地方。
1、表达式案例
? ()->{}
? ()->{System.out.println(1);}
? ()->System.out.println(1)
? ()->{return 100;}
? ()->100
? ()->null
? (int x)->{return x+1;}
? (int x)->x+1
? (x)->x+1
? x->x+1
2、实例:常用的线程写法 注意:如果只有一行代码可以省略大括号 在小括号中可以传入参 类型可以省略。在自定义只有一个接口的方法是可以加入注解:functionInterface 函数时接口的注解。
Callablev = new Callable() { @Override public String call() throws Exception { return null; } }; Callable v2 =()->{ return "wanghuaming"; }; System.out.println(v2.call()); }
public static void main(String[] args) throws Exception {
Callable c3 = ()-> "3333333333";
System.out.println(c3.call());
}
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("33333333333");
}
};
r1.run();
Runnable r2 = () -> {
System.out.println("2222222222");
};
r2.run();
Runnable r3 =()-> System.out.println("44444444444444444");
r3.run();
我们在源码上可以清晰的看到此处的注解为:
函数式接口的举例:我们可以看到 如果有返回值写retrun关键字的话,必须需要加大括号。参数可以传类型也可以不传类型。
3、同时在jdk中有提供了几个函数时的接口:
Supplier 此接口提供了输出参数的类型。
Functiion 此接口提供了输入和输出参数的类型。
Consumer 此接口定义了输入的输入的参数类型。
源码如下:
@FunctionalInterface public interface Function{ /** * Applies this function to the given argument. * * @param t the function argument * @return the function result */ R apply(T t);} @FunctionalInterface public interface Supplier { /** * Gets a result. * * @return a result */ T get(); }
使用细节通过截图明确:
4、lambda细节处理问题:
runnable接口的run方法式没有返回值的,但是可以接口有返回值和无返回值的方法,可以理解为没有对返回接口处理。但第三个方法和第四个为啥报错呢?因为没有DA括号 就说明神省略了return的关键字。所以会报错。
此处我们可以看到get方法是由返回值的。且返回int类型。如果没有返回值就会报错。 因为只有一行代码可以省略大括号。
5、Lambada方法的引用。
静态方法的引用。
实例方法的引用:
对象方法的引用:
构造方法的引用。