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 函数时接口的注解。
Callable<String> v = new Callable() { @Override public String call() throws Exception { return null; } }; Callable<String> v2 =()->{ return "wanghuaming"; }; System.out.println(v2.call()); }
public static void main(String[] args) throws Exception {
Callable<String> 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<T, R> {
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);}
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
使用细节通过截图明确:

4、lambda细节处理问题:
runnable接口的run方法式没有返回值的,但是可以接口有返回值和无返回值的方法,可以理解为没有对返回接口处理。但第三个方法和第四个为啥报错呢?因为没有DA括号 就说明神省略了return的关键字。所以会报错。

此处我们可以看到get方法是由返回值的。且返回int类型。如果没有返回值就会报错。 因为只有一行代码可以省略大括号。

5、Lambada方法的引用。

静态方法的引用。

实例方法的引用:

对象方法的引用:


构造方法的引用。


本文来自博客园,作者:Jerry&Ming,转载请注明原文链接:https://www.cnblogs.com/jerry-ming/p/16031284.html

浙公网安备 33010602011771号