繁体   English   中英

Lambda表达式,用于实例化功能接口并在单个类中重写相同的接口默认方法

[英]Lambda Expression for instantiating a functional interface and Overriding the same interface default method in single class

//基本接口-功能接口,因为它仅包含一种抽象方法

@FunctionalInterface
public interface BaseInterface {

    int sum(int a, int b);

}

使用Lambda表达式实例化功能接口

public class Implementer {

    public static void main(String[] args) {
        BaseInterface base = (num1, num2) -> num1 + num2;

        System.out.println(base.sum(3, 2));
    }

}

接口中扩展的功能-添加了新的默认方法

@FunctionalInterface
public interface BaseInterface {

    int sum(int a, int b);

    default String getUserDetails(String name) {
        return name;
    }   
}

如果我覆盖默认方法而不是默认方法来实现特定的实现,则必须使用'implements'关键字通过以下方式指定接口:

public class Implementer implements BaseInterface {

    public String getUserDetails(String uname) {
        uname = uname.trim();
        return uname;
    }

    public static void main(String[] args) {
        BaseInterface base = (num1, num2) -> num1 + num2;

        System.out.println(base.sum(3, 2));
    }

}

在这种情况下,编译器将引发错误并提示实现继承的抽象方法。 因此,在这种情况下,我是否必须以通常的方式实现抽象方法

public class Implementer implements BaseInterface {

    public String getUserDetails(String uname) {
        uname = uname.trim();
        return uname;
    }

    public static void main(String[] args) {
        //BaseInterface base = (num1, num2) -> num1 + num2;

        System.out.println(base.sum(3, 2));
    }

    @Override
    public int sum(int a, int b) {
        return a + b;
    }

}

(或)有没有办法仍然使用lambda表达式?

您可以在扩展BaseInterface另一个接口中覆盖默认方法:

public interface Extender extends BaseInterface {
    @Override
    default String getUserDetails(String uname) {
        uname = uname.trim();
        return uname;
    }
}

然后Extender e = (a, b) -> 2 * a + 2 * b;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM