неожиданная функция метода экземпляра ... найдена в несвязанном поиске - PullRequest
0 голосов
/ 05 июня 2019

Зачем нужен экземпляр для поля whyIsAnInstanceRequired и он не будет работать как в поле ERRwhyIsAnInstanceRequired?

Ошибка компиляции:

Error: java: incompatible types: invalid method reference
            unexpected instance method function(programming.java.FunctionalQuestion.Helper,programming.java.FunctionalQuestion) found in unbound lookup

См. Код:

package programming.java;

    public class FunctionalQuestion {
        class Helper{}
        public void setValue (long value){}
        java.util.function.ObjLongConsumer<FunctionalQuestion> whyIsAnInstanceNotRequired =
                FunctionalQuestion::setValue;
        public void function(Helper helper, FunctionalQuestion functionalQuestion) {}

        java.util.function.BiConsumer<Helper, FunctionalQuestion> whyIsAnInstanceRequired =
                 new FunctionalQuestion()::function;

        /*
        * Error: java: incompatible types: invalid method reference
            unexpected instance method function(programming.java.FunctionalQuestion.Helper,programming.java.FunctionalQuestion) found in unbound lookup
        * */
        java.util.function.BiConsumer<Helper, FunctionalQuestion> ERRwhyIsAnInstanceRequired =
                FunctionalQuestion::function;

    }

1 Ответ

0 голосов
/ 07 июня 2019

Полагаю, это объясняет, почему я был удивлен оригинальным кодом.

Эта концепция называется:

Ссылка на метод экземпляра произвольного объекта определенного типа.

Пример: ContainingType::methodName как объясненоin: methodreferences.html

Из этого документа:

Ниже приведен пример ссылки на метод экземпляра произвольного объекта определенного типа.:

String[] stringArray 
       = { "Barbara", "James", "Mary", "John","Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);

Эквивалентное лямбда-выражение для ссылки на метод String::compareToIgnoreCase будет иметь формальный параметр list (String a, String b), где a и b - произвольные имена, используемые для лучшего описания этого примера.Ссылка на метод будет вызывать метод a.compareToIgnoreCase(b).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...