资讯详情

Lambda表达式入门(下篇)

图片 我们看到了最后一个,函数接口的定义似乎不符合,但Comparator。这个是,所有的接口。所以,Comparator显式的。 虽然Lambda虽然可以当是Object类型,但需要显式转换。 我们可以用一个Lambda表达式为一个函数接口赋值:

Runnable r1 = () -> {System.out.println(“Hello Lambda!”);};

然后给一个赋值Object:

Object obj = r1;

但不能这样做:

Object obj = () -> {System.out.println(“Hello Lambda!”);}; // ERROR! Object is not a functional interface!

必须将显式转换为函数接口:

Object o = (Runnable) () -> { System.out.println(“Hello Lambda!”); };

一个Lambda只有在转换为函数接口后才能作为表达式Object使用。因此,不能编译以下句子:

System.out.println( () -> {} ); //错误! 目标类型不明

必须先转型:

System.out.println( (Runnable)() -> {} ); // 正确

我们可以定义类似于无参数、无返回值的接口Runnable

@FunctionalInterface public interface MyRunnable { public void run(); }

下面的写法都是正确的

Runnable r1 =() -> {System.out.println(“Hello Lambda!”);}; MyRunnable r2 = () -> {System.out.println(“Hello Lambda!”);};

这说明一个(函数接口),只要即可。 但要注意一个

Lambda域和访问限制

域即作用域,Lambda参数列表中的参数在表达式中Lambda(域)在表达式范围内有效。

在Lambda表达式外部的局部变量将被接受JVM隐式编译成final类型只能访问而不能修改。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-9qeb0fvC-1651218054079)(https://uploader.shimo.im/f/jr58PED jvrAoTNuI.png!thumbnail)]

在Lambda在表达式内部,静态变量和成员变量可读可写。

内置函数接口

你有没有注意到,如果使用的话Lambda表达式,,其实接口很多,所以Java为我们提供了几个常用的标准函数接口:

Consumer< T >con : void accept(T t); Supplier< T >sup : T get(); Function< T , R >fun : R apply (T t); Predicate< T >: : boolean test(T t);

接口中的方法是 void accept(T t),

这是传入num参数值,相关处理(消费)。处理的具体内容是

(num) -> System.out.println(“消费了” num)

上面的代码是典型的;如果没有内置的函数接口,我们就会,如:

interface MyConsumer{ void doFunction(T t); }

与内置函数接口,其实本质是一样的,这就是为什么Java可以提供一些内置函数

接口中的方法 T get(), ier供给型接口** 接口中的方法 T get(),

标签: qeb扩束复合连接器光缆组件

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司