Charsequence sau overflow de stivă de șir în limba engleză

CharSequence este o interfață cu toate consecințele. Sub capota poate fi CharBuffer, Segment, String, StringBuffer, StringBuilder. Sau implementarea proprie.

Pentru a înțelege, voi da următorul exemplu:

Metoda SoutString imprimă clasa și conținutul șirului:

Dacă vrem să folosim StringBuilder. apoi pentru a folosi metoda SoutString, trebuie să folosim conversia. Deoarece se așteaptă ca String:

Adăugați aceste linii și urmăriți rezultatul:

De asemenea, știm că String și StringBuilder implementează interfața "CharSequence" și acest lucru ne permite să scriem următoarele:

Rezultatul va fi următorul:

Rețineți faptul că în cel de-al doilea caz StringBuilder a fost trecut la metoda.

  • Putem trece în metoda noastră orice clase care implementează interfața.
  • În interiorul metodei, puteți utiliza metode de interfață, cum ar fi lungimea ();

Și putem efectua în condiții de siguranță acțiuni specifice în interiorul metodei:

Eu nu sunt un cunoscător de Android, dar cred că @Barmaley a vrut să spună că dacă obiectul String este trecut ca CharSequence. atunci textul va fi afișat pur și simplu. Și dacă obiectul implementează în plus Spannable. atunci poate fi de asemenea pictat.

Formal, desigur, CharSequence este o interfață, dar sarcina semantică a CharSequence în Android presupune de obicei că setul de caractere poate avea unele stiluri în viitor - în mod special Spannable. De exemplu, puteți face ca partea liniei să aibă o altă culoare sau font.

În consecință, este logic să folosiți CharSequence dacă se presupune că anumite părți ale stringului au nevoie sau pot fi atribuite anumite proprietăți speciale - adică, ceva ce nu poate fi obținut prin folosirea capului String.

răspuns dat 12 Oct 15 la 8:45 am

Brusc, Spannable este de asemenea o interfață. - Serghei Mitrofanov 12 Oct 15 la 9:46

@SergeyMitrofanov și ce urmează? Dacă sunteți din categoria Gramma-natsi cu un Java slant și spune :) - Barmaley 12 Oct '15 la 9:51 am

CharSequence este orice set de caractere, nu neapărat imun, ca obiect String. În această interfață, există literalmente patru metode. În Android, este implementat ca diferite șiruri și constructorii lor (String, StringBuilder, etc.) și text cu formatare (Spanned).

Orice CharSequence poate fi convertit într-un șir folosind metoda .toString (). dar poate fi o transformare cu pierderea informației. De exemplu, dacă convertiți textul într-un șir cu formatare (Spanned), atunci toate formatările vor fi șterse din acesta, iar dacă convertiți StringBuilder, veți pierde capacitatea de a edita această linie. În plus, o astfel de transformare este aproape întotdeauna crearea unui obiect nou.

Utilizați cele mai bune oriunde există 4 metode ale interfeței CharSequence și nu aveți nevoie de capabilitățile clasei String sau trebuie să salvați proprietățile obiectului trecut când treceți în altă parte. Dar trebuie să fii atent. În special, este mai bine să nu folosiți metoda equals () pentru a compara obiectele, deoarece acestea nu pot fi definite sau nu sunt definite așa cum doriți.

răspuns dat 12 Oct 15 la 14:55

Articole similare