不能将ToIntBiFunction作为参数传递给java

时间:2018-05-11 19:52:07

标签: java lambda

我现在开始学习Java中的Lambda表达式,我试图弄清楚为什么这段代码不起作用 我有一个普通班:

import java.util.function.ToIntBiFunction;


public class testclass {

    public testclass() {

    }
    public static ToIntBiFunction<Integer,Integer> multit2 = (Integer a,Integer b)->{
        return a*b;

    };

    public static Integer multit(Integer a, Integer b) {
        return a*b;
    }
}

和另一个班级的主要

public class ImageCovertor{

public static void main (String[] args) throws IOException {

    int d;
    testclass test = new testclass();

    BiFunction<ToIntBiFunction,Integer, Integer> ddd = (ToIntBiFunction fn, Integer a)->{
        return fn.applyAsInt(a,a);
    };
    d= ddd.apply(testclass::multit, 5);
    System.out.println(d);

}//end of main
public static ToIntBiFunction<Integer,Integer> multit = (Integer a,Integer b)->{
    return a*b;

};


}

我试图将multit作为参数传递给ddd lambda函数 但是这样的代码给了我一个错误:

d= ddd.apply(testclass::multit, 5);

类型testclass不定义适用于此的multit(Object,Object)

也尝试在main中创建函数,但它给了我同样的错误 我编写

时代码有效
testclass.multit

而不是

testclass::multit

有人可以向我解释为什么第二个不起作用以及如何解决这个问题? 谢谢

1 个答案:

答案 0 :(得分:1)

testclass::multit表示属于multit的方法testclass。你拥有的是一个包含函数的字段testclass.multit。持有函数的字段与方法不同。

class MyClass {
    // This is a method, `MyClass::foo`
    public static Integer foo(Integer a, Integer b) {
        return a*b;
    }
    // This is a field holding a function, `MyClass.bar`
    public static ToIntBiFunction<Integer, Integer> bar = (Integer a,Integer b)-> {
        return a*b;
    };
}