通过 lambda 表达式实现具有两个抽象方法的接口
2022-09-01 09:28:33
在 Java 8 中,引入了 lambda 表达式来帮助减少样板代码。如果接口只有一种方法,则工作正常。如果它由多个方法组成,则没有一个方法有效。如何处理多种方法?
我们可以选择以下示例
public interface I1()
{
void show1();
void show2();
}
那么,在main本身中定义方法的main函数的结构是什么?
在 Java 8 中,引入了 lambda 表达式来帮助减少样板代码。如果接口只有一种方法,则工作正常。如果它由多个方法组成,则没有一个方法有效。如何处理多种方法?
我们可以选择以下示例
public interface I1()
{
void show1();
void show2();
}
那么,在main本身中定义方法的main函数的结构是什么?
Lambda 表达式只能与 Eran 所说的功能接口一起使用,但是如果您确实需要在接口中使用多个方法,则可以根据需要将修饰符更改为或在实现它们的类中重写它们。default
static
public class Test {
public static void main(String[] args) {
I1 i1 = () -> System.out.println(); // NOT LEGAL
I2 i2 = () -> System.out.println(); // TOTALLY LEGAL
I3 i3 = () -> System.out.println(); // TOTALLY LEGAL
}
}
interface I1 {
void show1();
void show2();
}
interface I2 {
void show1();
default void show2() {}
}
interface I3 {
void show1();
static void show2 () {}
}
您不应忘记继承的方法。
这里,继承并因此不能是功能接口。I2
show1
show2
public class Test {
public static void main(String[] args) {
I1 i1 = () -> System.out.println(); // NOT LEGAL BUT WE SAW IT EARLIER
I2 i2 = () -> System.out.println(); // NOT LEGAL
}
}
interface I1 {
void show1();
void show2();
}
interface I2 extends I1 {
void show3();
}
要确保您的界面是功能性界面,您可以添加以下注释@FunctionalInterface
@FunctionalInterface <------- COMPILATION ERROR : Invalid '@FunctionalInterface' annotation; I1 is not a functional interface
interface I1 {
void show1();
void show2();
}
@FunctionalInterface
interface I2 {
void show3();
}
Lambda 表达式只能用于实现功能接口,函数接口是具有单个抽象方法的接口。具有两个抽象方法的接口不能由 lambda 表达式实现。