Warum ist die Methode String.IndexOf Teil der Schnittstelle CharSequence nicht?

8

Ich kann keine Nachteile bei der Herstellung von feststellen String.indexOf Teil der Benutzeroberfläche CharSequence . Der Vorteil wäre, dass andere Klassen wie StringBuffer oder StringBuilder auch die indexOf-Methoden implementieren müssten.

Gibt es irgendeinen Grund, warum indexOf nur Teil von String sein sollte?

Danke.

    
halex 06.12.2011, 06:33
quelle

3 Antworten

7

Ich bin nicht sicher, was der Grund dafür ist, aber ich kann ein Beispiel für eine Klasse geben, die CharSequence implementiert. Es ist java.nio.CharBuffer .

Theoretisch könnte indexOf() durch Aufruf von charAt() in loop implementiert werden. Aber es wird nicht funktionieren, wie der Benutzer erwartet. Wir können nicht zwischen zwei Situationen unterscheiden: Charakter ist noch nicht da und Charakter ist nicht da und wird nicht da sein. Im zweiten Fall sollte indexOf() -1 per Vertrag zurückgeben. Im ersten Fall sollte gewartet werden, bis alle Bytes angekommen sind. Aber CharBuffer gehört zu nicht blockierenden IO , so dass es nicht blockieren kann.

Ich glaube, das erklärt zumindest einen der möglichen Gründe.

BEARBEITEN:

Nach einem sehr wertvollen Kommentar von @Pacerier möchte ich folgendes hinzufügen. IMHO CharSequence als sehr generische Schnittstelle, die in verschiedenen Situationen verwendet wird. Die bekanntesten Implementierer dieser Schnittstelle sind String , StringBuffer und StringBuilder , die den gesamten Inhalt in einer Datenstruktur enthalten, die direkten Zugriff auf jedes Zeichen erlaubt. Dies ist jedoch im Allgemeinen falsch. java.nio.CharBuffer ist ein Beispiel für einen solchen Fall.

    
AlexR 06.12.2011, 07:16
quelle
3

Ich denke, das ist nur ein Versehen, da die Operation indexOf für jede Art von Sequenz sinnvoll ist.

    
missingfaktor 06.12.2011 07:12
quelle
2

Java 8 könnte einige dieser Probleme lösen. Es ermöglicht Standardimplementierungen für Schnittstellen. z.B.

%Vor%

Dadurch können zusätzliche Methoden zu Schnittstellen hinzugefügt werden, ohne dass alle Implementierer, die diese Methode implementieren, eine Belastung darstellen.

    
Peter Lawrey 06.12.2011 08:14
quelle