Comparator a compareTo

Comparator a compareTo
BirdSly
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
  • Postów: 15
0

Witam
Mam pytanie o to jakim cudem w miejsce metody przyjmującej 2 argumenty można wsadzić metodę przyjmującą 1 argument.

Tutaj wywoływana jest metoda z 2 argumentami:

Kopiuj
 Collections.sort(list, newMyComparator()::compare)

Kopiuj
 public int compare(MyObject o1, MyObject o2) {
        return o1.compareTo(o2);
    }

a tutaj z 1:

Kopiuj
  Collections.sort(list, MyObject::compareTo)

Kopiuj
 public int compareTo(MyObject o) {
        if(o.x == x)
            return 0;
        else if(o.x > x)
            return -1;
        else
            return 1;
    }
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Bo każda metoda niestatyczna w rzeczywistości ma jeden dodatkowy, niejawny argument jakim jest referencja this.

BirdSly
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
  • Postów: 15
0

To metoda compare z Comparatora ma 3 argumenty a compareTo 2, ale to dalej nie to same, i nie wyjaśnia.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
1

W 1. przypadku wyciągasz metodę z instancji obiektu, a więc this jest już podany. W 2. przypadku wyciągasz metodę niestatyczną prosto z klasy, więc this jest dodany do listy parametrów.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.