CharSequence-Inerface

Status
Nicht offen für weitere Antworten.

joe210

Mitglied
Ich beschäftige mich zurzeit mit Interfaces und hab mal eine Frage zum CharSequence Interface. Nehmen wir mal folgendes Beispiel an:
Code:
CharSequence chars = new String("hallo");
CharSequence blub = chars.subSequence(2,4);
Warum kann ich in der zweiten Zeile nicht schreiben
Code:
String blub = chars.subSequence(2,4);
chars.subSequence ruft doch die subSequence Methode aus String auf (ist ja ein String Objekt), welche intern wiederrum die subString-Methode aufruft. Somit gibt subSequence doch ein (neues) String-Objekt zurück was ich in 'String blub' speichern können sollte, oder?
Warum muss ich
Code:
String blub = (String) chars.subSequence(2,4);
schreiben - also expliziet das Objekt als String umwandeln?
 
R

Roar

Gast
ne, subSequence() liefert eine CharSequence. eine CharSequence ist ja nicht direkt ein String. WAS genau in der methode subSequence gemacht wird, kansnt du bzw. der compiler nicht wissen. die methode könnte genausogut einen StringBuffer zurückliefern. was letztenendlich rauskommt weißt du nicht, nur dass es eine CharSequence ist. wenn du unbedingt einen String brauchst benutze substring() oder leg einen neuen String an: new String(bla.subSequnce());
 

joe210

Mitglied
Ja klar, dass subSequence() eine charSequence zurückgibt weiß ich (steht ja auch in den API-Docs drin). Mir gehts bei dem Thread nur um die Theorie - ich will nur begreifen, warum das so is :)

Was ich mir gedacht hab:
Wenn ich einer Variable vom Typ CharSequnce ein neues String-Objekt zuweise und dann eine subSequence() davon will, bekomme ich von der Funktion subSequence() ein neues Objekt zurück. Dieses Objekt ist doch wiederrum ein String-Objekt, da ja effektiv das subSequence() aus der String-Klasse aufgerufen wurde?! (Polymorphie nennt man das ganze, oder?).

Somit - denk ich mir zumindestens - müsste ich das daraus resultierende Objekt also direkt einer Variable des Typs String zuweisen können (ohne explizietes Typcasting).

Ich hoffe, ihr versteht was ich mein ???:L
 
R

Roar

Gast
joe210 hat gesagt.:
Was ich mir gedacht hab:
Wenn ich einer Variable vom Typ CharSequnce ein neues String-Objekt zuweise und dann eine subSequence() davon will, bekomme ich von der Funktion subSequence() ein neues Objekt zurück. Dieses Objekt ist doch wiederrum ein String-Objekt, da ja effektiv das subSequence() aus der String-Klasse aufgerufen wurde?! (Polymorphie nennt man das ganze, oder?).
so wie ich dich verstehe geht das was du meinst nicht. subSequence() liefert eine CharSequence zurück. dass die methode in der klasse String implementiert ist, heißt nicht dass sie ecplizit auch einen String zurückliefert. Die methode köntne genausogut einen StringBuffer zurückliefern, egal ob sie in der klasse String ist.
"Dieses Objekt ist doch wiederrum ein String-Objekt"
dieser satz ist eben das, was nicht korrekt ist. im endeffekt ist es zwar ein String objekt, ist aber nicht zwangsweise so. Der Compiler weiß NICHT dass es ein String objekt ist, nur dass es irgendeine klasse ist, die CharSequence ist.

Falls das jetz ganz an deiner frage vorbei war, such auchmal im forum nach interfaces. gibt einige gute posts, die sinn von interfaces (und warum die methode subSequence() in String CharSequence und nicht String als rückgabetyp hat) erläutern.
 

joe210

Mitglied
Bin dank deiner Hilfe, der API-Dok. und einigen "Experimenten" jetzt dahintergekommen wie es speziell in diesem Fall läuft! Danke! :D
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben