通过lambda表达式使用两个抽象方法实现接口
在Java 8中,引入了
来帮助减少样板代码。如果接口只有一种方法,则可以正常工作。如果它包含多个方法,则所有方法均无效。如何处理多种方法?
我们可以去看下面的例子
public interface I1(){
void show1();
void show2();
}
那么,在主体本身中定义方法的主体函数的结构将是什么?
回答:
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 interfaceinterface I1 {
void show1();
void show2();
}
@FunctionalInterface
interface I2 {
void show3();
}
以上是 通过lambda表达式使用两个抽象方法实现接口 的全部内容, 来源链接: utcz.com/qa/421091.html