通过lambda表达式使用两个抽象方法实现接口

在Java 8中,引入了

来帮助减少样板代码。如果接口只有一种方法,则可以正常工作。如果它包含多个方法,则所有方法均无效。如何处理多种方法?

我们可以去看下面的例子

public interface I1()

{

void show1();

void show2();

}

那么,在主体本身中定义方法的主体函数的结构将是什么?

回答:

Lambda表达式只能与Eran所说的函数接口一起使用,但是如果您确实需要接口中的多个方法,则可以在需要时将修饰符更改为defaultstatic在实现它们的类中覆盖它们。

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继承show1show2因此不能成为功能接口。

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表达式使用两个抽象方法实现接口 的全部内容, 来源链接: utcz.com/qa/421091.html

回到顶部