「javalamda符号」javalamada表达式
今天给各位分享javalamda符号的知识,其中也会对javalamada表达式进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java lambda表达式优缺点
优点:
1、代码更加简洁,效率高;
2、减少匿名内部类的创建,节省资源;
缺点:
1、不熟悉Lambda表达式的语法的人,不太容易看得懂;
2、虽然代码更加简洁,但可读性差,不利于维护;
如有帮助请采纳(不懂请提问),可以看我主页,欢迎来交流学习;
什么情况下可以使用java8的lambda表达式
例1、用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了
lamda表达式 方法参数
Java Lambdas和单一方法接口
函数式编程通常用于实现事件监听器。Java中的事件监听器通常被定义为带有单个方法的Java接口。这里有一个单一方法接口示例:
public interface StateChangeListener {
public void onStateChange(State oldState, State newState);
}
这个Java接口定义了一种方法,该方法在状态改变时调用(不管被观察到的是什么)。
在Java 7中,为了侦听状态更改,您必须实现这个接口。假设您有一个名为StateOwner的类,它可以注册状态事件监听器。这是一个例子:
public class StateOwner {
public void addStateListener(StateChangeListener listener) { ... }
}
在Java 7中,可以用匿名接口实现添加事件监听器:
StateOwner stateOwner = new StateOwner();
stateOwner.addStateListener(new StateChangeListener() {
public void onStateChange(State oldState, State newState) {
// do something with the old and new state.
}
});
首先创建StateOwner实例。然后StateChangeListenerinterface的一个匿名实现被作为监听器被添加在StateOwner实例中。
在Java 8中,您可以使用Java lambda表达式添加事件监听器,如下所示:
StateOwner stateOwner = new StateOwner();
stateOwner.addStateListener(
(oldState, newState) - System.out.println("State changed")
);
lambda表达式是这部分:
(oldState, newState) - System.out.println("State changed")
lambda表达式与addStateListener()方法的参数类型相匹配。如果lambda表达式匹配参数类型(在这种情况下,是StateChangeListenerinterface),lambda表达式将转换成实现该参数接口的函数。
Java lambda表达式只能在匹配的类型只是单方法接口的时候使用。在上面的示例中,使用lambda表达式作为参数,参数类型为StateChangeListener接口。这个接口只有一个方法。因此,lambda表达式与该接口成功匹配。
Lambdas匹配接口
单个方法接口有时也被称为函数式接口。将Java lambda表达式与函数接口相匹配分为以下步骤:
•接口只有一个方法吗?
•lambda表达式参数是否与单方法参数匹配?
•lambda表达式的返回类型是否与单方法的返回类型匹配?
如果对这三个问题的回答是肯定的,那么给定的lambda表达式与接口成功匹配。
Lambda 类型推断
在Java 8之前,实现匿名接口前,必须指定要实现的接口。以下是本文开头的匿名接口实现示例:
stateOwner.addStateListener(new StateChangeListener() {
public void onStateChange(State oldState, State newState) {
// do something with the old and new state.
}
});
在lambda表达式中,类型通常可以从周围的代码中推断出来。例如,可以从addStateListener()方法的方法声明中推断参数的接口类型(StateChangeListener接口上的单一方法)。这就是所谓的类型推断。编译器通过查找其他类型的参数来推断参数的类型—在本例中是方法定义。这是本文开始的例子,StateChangeListenerinterface并未在lambda表达式提及:
stateOwner.addStateListener(
(oldState, newState) - System.out.println("State changed")
);
在lambda表达式中,参数类型通常也可以推断出来。在上面的例子中,编译器可以从onStateChange()方法声明中推断出它们的类型。因此,从onStateChange()方法的方法声明中推断出参数oldState和newState的类型。
Lambda 参数
由于Java lambda表达式实际上只是方法,lambda表达式可以像方法一样接受参数。前面显示的lambda表达式的(oldState,newState)部分指定lambda表达式所采用的参数。这些参数必须与单一方法接口上的方法参数相匹配。在此例中,这些参数必须与StateChangeListener接口的onStateChange()方法的参数相匹配:
public void onStateChange(State oldState, State newState);
lambda表达式和方法参数数量必须匹配。
其次,如果您在lambda表达式中指定了任何参数类型,那么这些类型也必须匹配。我还没有向您展示如何在lambda表达式设置类型(稍后将在本文中展示),在很多情况下您并不需要它们。
0 参数
如果匹配lambda表达式的方法没有参数,则可以像这样编写lambda表达式:
() - System.out.println("Zero parameter lambda");
注意括号之间没有内容。这表示lambda没有参数。
单个参数
如果方法与Java lambda表达式相匹配,那么您可以编写这样的lambda表达式:
java中lambda表达式怎样实现一个多方法的接口呢
并不是所有接口都可以使用Lambda表达式,只有函数式接口可以。
按照Java8函数式接口的定义,其只能有一个抽象方法,否则就不是函数时接口,就无法用Lambda表达式。
可以使用@FunctionalInterface标注函数式接口,在编译时提前发现错误。
关于javalamda符号和javalamada表达式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-24,除非注明,否则均为
原创文章,转载请注明出处。