не может передать ToIntBiFunction как параметр в лямбда-выражении в Java - PullRequest
0 голосов
/ 11 мая 2018

В настоящее время я начал изучать лямбда-выражения в Java и пытаюсь выяснить, почему этот код не работает. У меня есть общий класс:

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), который применим здесь

также пытался сделать функцию в основном, но это дает мне ту же ошибку, код работает, когда я пишу

testclass.multit

вместо

testclass::multit

Может кто-нибудь объяснить мне, почему второй не работает и как это исправить?спасибо

1 Ответ

0 голосов
/ 11 мая 2018

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;
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...