Prośba o wyjaśnienie działania methody toString() w interfejsie TextWatcher

0

Witajcie,

jak dokładnie czytać (co tu dokładnie się dzieje) tą linię kodu mCrime.setTitle(s.toString());, w tym kodzie

 mTitleField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence s, int i, int i1, int i2) {
                mCrime.setTitle(s.toString());

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });



0

Masz jakiś CharSequence s który jak mówi dokumentacja jest readable sequence of char values. W metodzie onTextChange chcesz ustawić nowy tytuł. SKoro metoda setTitle przyjmuje obiekt String to nie możesz tam przekazać CharSequence więc używasz sobie na obiekcie s metody toString() która zwraca Ci właśnie stringa - dokumentacja mówi tak: Returns a string containing the characters in this sequence in the same order as this sequence.

0

Ok, dziękuję Ci bardzo. Jeszcze tylko nie rozumiem dlaczego "nie mogę przekazać tam CharSequence".

2

Bo zapewne metoda setTitle jest zdefiniowana jakoś tak:

void setTitle(String title) {
   this.title = title;
}
0

Tak, masz rację. Czyli nie mogę przekazać tam CharSequence bo mam tak zdefiniowaną metodę setTitle jak piszesz powyżej. Ale jak się jedno mam do drugiego? Wciąż po prostu nie mogę załapać idei.

1
Kubs napisał(a):

Tak, masz rację. Czyli nie mogę przekazać tam CharSequence bo mam tak zdefiniowaną metodę setTitle jak piszesz powyżej. Ale jak się jedno mam do drugiego? Wciąż po prostu nie mogę załapać idei.

Gdyby rzucić okiem do dokumentacji to znajdziemy tam:

public final class String extends Object implements Serializable, Comparable<String>, CharSequence

Zatem wszędzie gdzie metoda przyjmuje jako parametr obiekt CharSequence możesz przekazać String, bo klasa String implementuje interfejs CharSequence (innymi słowy każdy String jest sekwencją znaków). W drugą stronę to nie działa - może istnieć implementacja interfejsu CharSequence, która Stringiem nie jest.

Lub jeszcze inaczej: metoda setTitle przyjmuje obiekt konretnej klasy (String), a np. metoda onTextChanged przyjuje obiekt dowolnej klasy implementujacej interfejs CharSequence

1 użytkowników online, w tym zalogowanych: 0, gości: 1