如何为包含多个方法的接口定义Lambda表达式?
多方法接口无法直接使用Lambda表达式的解决办法
Lambda表达式是Java 8为函数式接口(仅包含一个抽象方法的接口)设计的语法糖,所以你提供的包含两个抽象方法的Interface无法直接用Lambda实现。下面是几种可行的解决方案:
修改接口为函数式接口
如果有权限修改接口,可以删除多余的抽象方法,或者用@FunctionalInterface注解明确标记(该注解会在编译时检查接口是否符合函数式接口规范,不符合则报错)。示例如下:@FunctionalInterface interface Interface { public String ra(String p); } public static void main(String[] args) { Interface r = (x) -> x; String getValue = r.ra("string"); System.out.println(getValue); }使用匿名内部类实现
如果不能修改原有接口,匿名内部类是实现多方法接口的传统方式,它可以完整实现接口中的所有抽象方法:interface Interface { public void st1(); public String ra(String p); } public static void main(String[] args) { Interface r = new Interface() { @Override public void st1() { System.out.println("执行st1方法"); } @Override public String ra(String p) { return p; } }; r.st1(); String value = r.ra("test"); System.out.println(value); }拆分接口并组合实现
将原多方法接口拆分为多个独立的函数式接口,每个接口对应一个抽象方法,再通过类或其他方式组合这些接口的Lambda实现:// 拆分出的函数式接口 @FunctionalInterface interface St1Interface { void st1(); } @FunctionalInterface interface RaInterface { String ra(String p); } // 原接口的实现类,用于组合两个函数式接口的实例 class InterfaceImpl implements Interface { private St1Interface st1Func; private RaInterface raFunc; public InterfaceImpl(St1Interface st1Func, RaInterface raFunc) { this.st1Func = st1Func; this.raFunc = raFunc; } @Override public void st1() { st1Func.st1(); } @Override public String ra(String p) { return raFunc.ra(p); } } public static void main(String[] args) { // 用Lambda分别实现拆分后的接口 Interface combined = new InterfaceImpl( () -> System.out.println("执行st1方法"), (x) -> x ); combined.st1(); System.out.println(combined.ra("hello")); }
内容的提问来源于stack exchange,提问作者rakib3903
相关产品推荐
相关产品推荐

