供应商的Java功能接口< t>无法编译非lambda

发布于 2025-02-14 02:10:37 字数 584 浏览 4 评论 0 原文

我已经说过:

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无法解决到变量Java(33554515)

如果我将其更改为lambda函数,则它会编译:

    public void callFunc(){
        fSupplier(()->Integer.valueOf(1));
    }

那么这里的核心差异是什么?如何在此处使用非LAMBDA实现?

谢谢。

I've got this:

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

It says: myfunc cannot be resolved to a variableJava(33554515)

If I change it to a lambda function then it compiles:

    public void callFunc(){
        fSupplier(()->Integer.valueOf(1));
    }

So what is the core difference here? How can I use a non-lambda implementation here?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遥远的绿洲 2025-02-21 02:10:38

您将需要将 myFunc 作为

尝试以下操作:

public void callFunc() {
    fSupplier(this::myfunc);
}

You will need to pass myfunc as a method reference.

Try this:

public void callFunc() {
    fSupplier(this::myfunc);
}
我一向站在原地 2025-02-21 02:10:38

您的方法具有类型供应商&lt; integer&gt; 的一个参数,因此您有三个选择将作为参数传递给此方法的选择(这个想法是通过一个实现功能接口供应商的类的实例):

  • < p> lambda表达式

      public void callfunc(){
        fsupplier(() - &gt; integer.valueof(1));
    }
     
  • 方法参考

      public void callfunc(){
         fsupplier(this :: myfunc);
     }
     
  • 匿名内部类

      public void callfunc(){
         fsupplier(新供应商&lt; integer&gt;(){
    
             @Override
             公共整数get(){
                 返回integer.valueof(1);
             }
         }); 
     }
     

Your method have one parameter of type Supplier<Integer> so you have three choices to pass as argument to this method (the idea is to pass an instance of a class who implements the functional interface Supplier):

  • A lambda expression

    public void callFunc() {
        fSupplier(()->Integer.valueOf(1));
    }
    
  • A method reference

    public void callFunc() {
         fSupplier(this::myfunc);
     }
    
  • An anonymous inner class

     public void callFunc(){
         fSupplier(new Supplier<Integer>() {
    
             @Override
             public Integer get() {
                 return Integer.valueOf(1);
             }
         }); 
     }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文