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



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

@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;
    }   
}

如果我覆盖具有特定实现而不是默认实现的默认方法,则必须使用"实施"关键字以这种方式指定接口:

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;
    }
}

(OR(是否有一种方法仍然使用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;

最新更新