当前位置: 首页 > 知识库问答 >
问题:

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

商冠玉
2023-03-14

//基接口-函数接口,因为它只包含一个抽象方法

@FunctionalInterface
public interface BaseInterface {

    int sum(int a, int b);

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

}

(或者)是否有方法仍然使用lambda表达式

共有1个答案

锺离浩慨
2023-03-14

您可以在扩展baseinterface的另一个接口中重写默认方法:

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

然后扩展器e=(a,b)->2*a+2*b;

 类似资料:
  • 我遇到了这个问题: 下面的输出是什么? 我的想法是: 我的第一直觉告诉我-i=new I(){}?因此,我们不能实例化接口-问题1。 那么我认为公共默认字符串是toString()?重写对象类方法?听起来不太好-问题2 可能的答案: a)10I b) 15I c)由于第11行编译失败 d)由于第15行编译失败 e)由于多个错误导致编译失败 解释完我的想法后,我选择了错误的答案。正确答案是D,我也答

  • 问题内容: 随处可见Java 8 lambda。当我向接口添加其他方法时,为什么这会给我一个错误: 在没有第二种方法的情况下可以正常工作:“ public int getID(String name) 问题答案: Java lambda和方法引用只能分配给 功能接口 。从Java SE 8 API中,软件包描述: 每个函数接口都有一个单一的抽象方法,称为该函数接口的函数方法,lambda表达式的参

  • 我想通过创建一个具体实现类的对象来执行接口中默认方法的定义体,该对象也覆盖了该方法。无论我是直接创建具体实现类的对象,还是通过动态绑定/多态,实现类中定义/重写的主体都只是得到执行。请看下面的代码 我想知道如何在控制台内部界面银行打印以下内容--loan()

  • 用Java 8 lambdas到处乱搞。为什么当我向接口添加另一个方法时,这会给我一个错误: 不使用第二个方法也能正常工作:“public int getID(String name)

  • Java8同时引入了Lambda表达式和类型注释。 可以将lambda表达式强制转换为使用者,然后注释强制转换表达式的类型引用: 但这不会产生所需的结果,因为创建的使用者类不会用强制转换表达式的批注进行批注。产出: 两个问题: 但是注释参数对lambda表达式不起作用: 有趣的是,当使用lambda表达式时,也不可能接收参数的名称(当使用javac-parameter编译时)。不过,我不确定这种行