当前位置: 首页 > 面试题库 >

Lambda只能与功能接口一起使用吗?

贺山
2023-03-14
问题内容

我这样做:

public class LambdaConflict
{
    public static void main(String args[]){
        //*
        System.out.println(LambdaConflict.get(
            (str) -> "Hello World!! By ME?"
        ));
        /*/
        System.out.println(LambdaConflict.get(new Intf<String> (){
            @Override public String get1(String str){
                return "Hello World!! By get1 " + str;
            }
        }));
        /*****/
    }

    public static String get(Intf<String> i, boolean b){
        return i.get1("from 1");
    }
}

interface Intf<T>
{
    public T get1(T arg1);

    public T get2(T arg1);
}

并获得此异常:

不兼容的类型:Intf不是功能接口接口Intf中存在多个非重写的抽象方法。用-Xdiags:verbose重新编译以获得完整的输出1错误

是否有任何条件不能使用lambda替换匿名类?


问题答案:

否。没有办法“克服”这一问题。功能接口必须只有一种抽象方法。您的界面有两个:

interface Intf<T> {
    public T get1(T arg1);
    public T get2(T arg1);
}

注意:您不需要注释中提到的界面注释。但是,@FunctionalInterface如果您的接口不是有效的功能接口,则可以使用注释获得编译时错误。因此,它为您的代码带来了更多安全性。

有关更多信息,请参见例如http://java.dzone.com/articles/introduction-
functional-1



 类似资料:
  • 问题内容: 我认为这个问题已经存在,但是我找不到。 我不明白,为什么必须要有一个功能接口才能使用lambda。考虑以下示例: 这可以正常工作,但是如果您取消注释行,则不会。为什么?以我的理解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码? 编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是在这里,我得到了一些非常有用的答案,这要

  • 问题内容: JDK Proxy类仅在工厂方法newProxyInstance()中接受接口。 是否有可用的解决方法或替代实施?如果我必须将方法提取到接口以使其能够与代理一起使用,则用例是有限的。我想包装它们以在运行时应用基于注释的动作。 问题答案: 您可以像这样使用cglib: 例如,这使您可以使用默认的实现方法来构建抽象类。但是您可以将增强器更改为所需的增强器。

  • 问题内容: 为什么以下断言起作用: 但是这个断言给出了一个错误: 我能看到的唯一区别是使接口属性之一为可选()。似乎如果所有属性都不是可选的,那么我可以向接口声明一个部分对象,但是一旦任何接口属性都是可选的,我就不能再声明一个部分对象。这对我来说真的没有意义,我一直无法找到这种行为的解释。这里发生了什么? 对于上下文:我在尝试解决React的部分状态对象问题时遇到了此行为,但是TypeScript

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

  • 为了丰富运营体验,让开发者更好的体验积分商城功能,兑吧提支持更多的扩展功能 . 支持的扩展功能包含: 1. 游客用户唤醒登录 2. 自有虚拟商品充值 接口说明 充值接口API文档 通知接口API文档 3.加积分接口 接口说明 API文档 4.免登URL自定义参数 dcustom参数 transfer参数 signKeys参数 5. 会员等级功能 6.前置商品查询接口 7. 【秒杀商品】前置查询接口

  • 开发者只需对接完成免登接口、扣积分接口和兑换结果通知接口三个必选接口即可实现商城的基本功能,包括兑换商品,发布积分商城活动等 1.免登录地址接口 用户通过服务端生成的免登录url跳转到积分商城 接口说明 API文档 常见问题 2.扣积分接口 用户点击马上兑换,兑吧向开发者发起兑换请求,开发者进行json响应 接口说明 API文档 常见问题 3.兑换结果通知接口 兑吧把订单的状态通知给开发者,开发者