Warum haben Java-Designer in der java.lang.String
Klasse keine statischen Versionen von String-Manipulationsmethoden erstellt ? Die folgenden Methoden sind das, worauf ich mich beziehe, aber die Frage kann auch auf andere nicht statische Methoden in der Klasse ausgeweitet werden.
concat(String) substring(int, int)
replace(char, char) toLowerCase()
replace(CharSequence, CharSequence) toLowerCase(Locale)
replaceAll(String, String) toString()
replaceFirst(String, String) toUpperCase()
split(String) toUpperCase(Locale)
split(String, int) trim()
substring(int)
Wenn nur nicht statische Versionen dieser Methoden vorhanden sind, wird die explizite Nullprüfung überall dort erzwungen, wo eine solche Methode aufgerufen werden muss. Zum Beispiel example = example.trim()
würde ein einfacher Aufruf zu NullPointerException if führen String example = null
. Der Programmierer muss also den folgenden Null-Check für das Boilerplate durchführen:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
Ich würde mir vorstellen, dass es viel praktischer gewesen wäre, wenn String
statische Versionen dieser Methoden (vielleicht sogar ausschließlich ) verwendet worden wären, bei denen die Eingabezeichenfolge als erstes Argument herangezogen würde:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Dies hätte zu einem saubereren Code geführt, der von Programmierern geschrieben wurde und der sich automatisch um Nullfälle gekümmert hätte, indem einfach Null zurückgegeben wurde, anstatt die Programmierer zu zwingen, explizit Nullfälle zu behandeln. Die Rückgabe von null ist für mich sinnvoll, da die Manipulation einer Nullzeichenfolge zu einer Nullzeichenfolge und nicht zu einem Fehler führen sollte.
Warum haben Java-Designer nicht daran gedacht, als sie die String
Klasse in Java 1 oder Java 2 entworfen oder in einer späteren Java-Version sogar eine solche Funktionalität hinzugefügt haben?
null
ist ein Ausnahmezustand und sollte ausdrücklich behandelt werden.
Maybe<T>
Typs, denke ich?
string name = employee?.personalData?.name
. Nur als Abkürzung für all diese sich wiederholenden if (employee != null)
s. Verwandte SO Frage: stackoverflow.com/questions/1196031/…