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

多方法接口的Lambda表达式

夏星阑
2023-03-14

用Java 8 lambdas到处乱搞。为什么当我向接口添加另一个方法时,这会给我一个错误:

      interface Something {
  public String doit(Integer i);
  public int getID(String name);.....

        Something s = (Integer i) -> {
        return i.toString();
    };
    System.out.println(s.doit(4));

    Something y = (Integer i) -> {
        return "do nothing";
    };
    System.out.println(y.doit(4));

不使用第二个方法也能正常工作:“public int getID(String name)

共有1个答案

夹谷晋
2023-03-14

Java lambda和方法引用只能分配给函数接口。在Java SE 8 API中,Java.util.function包的描述:

每个函数接口都有一个抽象方法,称为该函数接口的函数方法,lambda表达式的参数和返回类型与之匹配或适应。函数接口可以在多个上下文中提供目标类型,例如赋值上下文、方法调用或强制转换上下文:

JLS 9.8还对此进行了讨论:

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

  • 问题内容: Java 8引入了Lambda表达式和类型注释。 使用类型注释,可以定义Java注释,如下所示: 然后可以在任何类型引用上使用此注释,例如: 这是一个完整的示例,使用此批注打印“ Hello World”: 输出将是: 在Java 8中,还可以用lambda表达式替换此示例中的匿名类: 但是由于编译器会推断lambda表达式的Consumer类型参数,因此不再能够注释创建的Consum

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

  • 问题内容: 在Java 8中,引入了 lambda表达式 来帮助减少样板代码。如果接口只有一种方法,则可以正常工作。如果它包含多个方法,则所有方法均无效。如何处理多种方法? 我们可以去看下面的例子 那么,在主体本身中定义方法的主体函数的结构将是什么? 问题答案: Lambda表达式只能与Eran所说的函数接口一起使用,但是如果您确实需要接口中的多个方法,则可以在需要时将修饰符更改为或在实现它们的类

  • 本文向大家介绍Java使用Lambda表达式实现Function 接口,包括了Java使用Lambda表达式实现Function 接口的使用技巧和注意事项,需要的朋友参考一下 Function <T,R>接口是java.util.function包中的函数接口。此接口需要一个参数作为输入并生成结果。Function <T,R>接口可用作lambda 表达式或方法引用的分配目标。它包含一个抽象方法: