ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – Lambda只能用于功能接口吗?

2019-09-30 11:02:18  阅读:511  来源: 互联网

标签:functional-interface java java-8 lambda


我这样做了:

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

并获得此异常:

incompatible types: Intf is not a functional interface
multiple non-overriding abstract methods found in interface Intf
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get
full output
1 error

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

解决方法:

不,没有办法“克服”这一点.功能接口必须只有一个抽象方法.你的界面有两个:

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

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

有关详情,请参阅http://java.dzone.com/articles/introduction-functional-1

标签:functional-interface,java,java-8,lambda
来源: https://codeday.me/bug/20190930/1835672.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有