Mam następujący fragment kodumetoda - nieważne referencyjna metoda - nie może być odniesienie do kontekstu statycznego
StringJoiner joiner = new StringJoiner(", ");
joiner.add("Something");
Function<StringJoiner,Integer> lengthFunc = StringJoiner::length;
Function<CharSequence,StringJoiner> addFunc = StringJoiner::add;
Ostatni wiersz spowoduje błąd
Error:(54, 53) java: invalid method reference
non-static method add(java.lang.CharSequence) cannot be referenced from a static context
Rozumiem, że metoda ta nie może być używane w sposób statyczny i powinienem mieć coś takiego:
Function<CharSequence,StringJoiner> addFunc = joiner::add;
zamiast tego. Jednak nie mogę zrozumieć, dlaczego trzecia linia, z StringJoiner::length;
jest dla kompilatora java idealnie poprawne. Czy ktoś może wyjaśnić mi, dlaczego tak jest?
Teraz, gdybyś zamiast stosować 'stolarskie :: add' że _would_ być poprawnym' zakresie funkcji ... –