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

Javalambda如何自动匹配接口的功能?

陶树
2023-03-14

我正在测试java的lambda是否与接口函数匹配,我在下面写了代码,它可以工作。我有接口MyHandler和它的myFunction。在构建时,Javalambda被转换为我的接口的实现者。

package mygroup;
interface MyHandler{
    void myFunction(int i);
}
class Worker{
    private final MyHandler handler;
    public Worker(MyHandler h){
        handler = h;
    }
    public void work(int i){handler.myFunction(i);};
}
public class TestLambda {
    public static void main(String[] args) {
        Worker worker = new Worker(i -> System.out.println(i));
        worker.work(3);
    }
}

程序将打印3。到目前为止还不错,但是如果我在MyHandler中添加一些其他函数声明,如下所示:

interface MyHandler{
    void myFunction(int i);
    void f(int i, int j);
}

线程构造函数中的lambda将无法编译,表示

The constructor Worker((<no type> i) -> {}) is undefinedJava(134217858)
The target type of this expression must be a functional interfaceJava(553648781)

那么,Java编译器什么时候可以决定lambda可以匹配MyHandler的类型,而不管我的函数名是什么?Justing在接口定义中有1个且只有1个函数?

谢谢。

共有1个答案

凤财
2023-03-14

Lambda是“函数式接口”的实现。函数式接口是只有一个抽象方法的接口。方法的名称并不重要。您只有一个方法的原始接口满足该条件。您的第二个版本有两个不同的抽象方法不满足该条件,编译器拒绝使用lambda作为MyHandler的实现。

注意,如果希望在接口一侧进行非常有用的编译器检查,可以添加可选的@functionanterface注释。编译器将只验证一个抽象方法条件:

@FunctionalInterface
interface MyHandler{
    void myFunction(int i);
}

使用此注释,如果抽象方法的数量不等于1,它将无法编译。

 类似资料:
  • 本文向大家介绍Android实现动态自动匹配输入内容功能,包括了Android实现动态自动匹配输入内容功能的使用技巧和注意事项,需要的朋友参考一下 什么是动态自动匹配输入内容呢?举个例子,当我们在百度等搜索引擎的输入框中输入想要搜索的关键词,输入框下面会提示很多相关联的热门搜索项,效果图如下 那在安卓中如何实现这种效果呢?在这里给大家推荐两个Android的控件: AutoCompleteText

  • 1. 认识数据组织格式 图表秀对上传或编辑的数据,主要识别两种格式:列表和交叉表。 列表是一种由数据项构成的有限序列,按横纵向排序而成,最常见的是数据库中存储的表单数据。 交叉表是一种常用的分类汇总表格,是展示统计结果的常见表现形式。 2. 图表秀里哪些图表可以同时支持交叉表和列表? 柱图、条形图、折线图、面积图、散点图、极坐标散点图、圆点图、象形图、3D柱状图、弦图、桑基图、关系图、表格、热力图

  • 问题内容: 我有一个接口IMenuItem 然后我有一个接口实现 有什么方法可以仅使用IMenuItem接口从配置类创建MenuItem的多个实例?与@autowired之类的?还可以通过指定构造函数的参数来自动装配吗? 问题答案: 实际上适合这种情况。你可以自动连接特定的类(实现)或使用接口。 考虑以下示例: 现在,你可以根据注释值选择对象的名称,从而选择使用其中一种实现方式 像这样: 要多次创

  • 问题内容: 我对Spring框架很陌生,遇到了以下问题。 我有一个接口,由class 和实现。 我将以下bean定义添加到 我想自动连接以下两个实现类。 上面的代码抛出错误为 无法自动写入字段:com.abc.ClassA1 com.abc.SomeClass.classA1; 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinition

  • 本文向大家介绍基于jQuery实现搜索关键字自动匹配功能,包括了基于jQuery实现搜索关键字自动匹配功能的使用技巧和注意事项,需要的朋友参考一下 今天我们就一起来看一个简单的基于jquery的关键字自动匹配的例子,希望文章能够对各位有帮助。 例子一 在项目中,有时候需要用户选择城市,但是城市太多,用户选择起来不太方便,所以提供了一个用户可以通过输入框输入城市的汉字或者拼音简写。结果示意图如下:

  • 问题内容: 我有一个接口IMenuItem 然后我有一个接口实现 有什么方法可以仅使用IMenuItem接口从配置类创建MenuItem的多个实例?与@autowired之类的?还可以通过指定构造函数的参数来自动装配吗? 问题答案: 实际上对于这种情况是完美的。您可以自动连接特定的类(实现)或使用接口。 考虑以下示例: 现在,您可以根据注释值选择对象的名称,从而选择使用其中一种实现方式 像这样: