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.
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.
Ich denke, das ist nur ein Versehen, da die Operation indexOf
für jede Art von Sequenz sinnvoll ist.
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.
Tags und Links string java design indexof charsequence