首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Supplier<T>的Java函数接口无法编译非lambda

Supplier<T>的Java函数接口无法编译非lambda
EN

Stack Overflow用户
提问于 2022-07-07 01:29:46
回答 2查看 42关注 0票数 0

我有这个:

代码语言:javascript
复制
import java.util.function.*;
public class FluentApi {
    public Integer myfunc(){
        return Integer.valueOf(1);
    }
    public void fSupplier(Supplier<Integer> si){
        System.out.println(si.get());
    }
    public void callFunc(){
        fSupplier(myfunc); // compilation failure
    }
}

上面写着:myfunc cannot be resolved to a variableJava(33554515)

如果我将它更改为lambda函数,那么它将编译:

代码语言:javascript
复制
    public void callFunc(){
        fSupplier(()->Integer.valueOf(1));
    }

那么这里的核心区别是什么呢?如何在这里使用非lambda实现?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-07 01:36:53

您需要将myfunc传递为方法参考

试试这个:

代码语言:javascript
复制
public void callFunc() {
    fSupplier(this::myfunc);
}
票数 2
EN

Stack Overflow用户

发布于 2022-07-07 01:50:27

您的方法有一个Supplier<Integer>类型的参数,因此您可以传递三个选项作为该方法的参数(其思想是传递一个实现函数接口提供者的类的实例):

  • 朗姆达的表情 公开无效callFunc() { fSupplier(()->Integer.valueOf(1));}
  • 方法参考 公共无效callFunc() {fSupplier(此:myfunc);}
  • 一个匿名的内部类 callFunc(){ fSupplier(新供应商(){@覆盖公共整数){返回Integer.valueOf(1);};}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72891384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档