Wpis z mikrobloga

#programowanie #java
Czytam książkę o Javie i natrafiłem na rozdział mówiący o referencjach do metod statycznych. Analizuje przykład i nie rozumiem. No to odpalam IDE wrzucam kod i co? I D**A nie działa. IDE się pluje do linijki:

outStr = stringOp(MyStringOps::strReverse, inStr);
Nie bardzo wiem dlaczego. Twierdzi że nie ma strReverce() i jeszcze jakieś inne błędy składni. Kombinowałem z typami, ale jakoś nie udało mi się niczego sensownego wykombinować.

Poniżej zamieszczam kod tych klas i metod.

// Prezentacja referencji do metod statycznych.

// Interfejs funkcyjny reprezentujący operacje na łańcuchach.
interface StringFunc {
String func(String n);
}


// Ta klasa definiuje metodę statyczną o nazwie strReverse().
class MyStringOps {
// Metoda statyczna odwracająca kolejność znaków w łańcuchu.
static String strReverse(String str) {
String result = "";
int i;

for(i = str.length()-1; i >= 0; i--)
result += str.charAt(i);

return result;
}
}



class MethodRefDemo {

// Ta metoda ma pierwszy parametr, którego typem jest
// interfejs funkcyjny. A zatem można do niej przekazać
// dowolną instancję tego interfejsu, w tym także referencję
// do metody.
static String stringOp(StringFunc sf, String s) {
return sf.func(s);
}

public static void main(String args[])
{
String inStr = "Wyrażenia lambda zwiększają możliwości Javy";
String outStr;

// Tutaj do wywołania metody stringOp() zostaje przekazana
// referencja do metody strReverse.
outStr = stringOp(MyStringOps::strReverse, inStr);

System.out.println("Początkowy łańcuch: " + inStr);
System.out.println("Łańcuch odwrócony: " + outStr);
}
}
  • 10
  • Odpowiedz
@kudlaty9102: ja bym zgadywał, że może klasy masz w różnych pakietach, ale "Twierdzi że nie ma strReverce() i jeszcze jakieś inne błędy składni" to tak jakby powiedzieć, "nie działa, bo nie i już"
  • Odpowiedz