Perché i progettisti Java non hanno creato versioni statiche dei metodi di manipolazione delle stringhe nella java.lang.String
classe? I seguenti metodi sono ciò a cui mi riferisco, ma la domanda può essere estesa anche ad altri metodi non statici nella classe.
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)
Avere solo versioni non statiche di questi metodi forza il controllo nullo esplicito ovunque un tale metodo debba essere chiamato. Ad esempio, la semplice chiamata example = example.trim()
porterebbe a NullPointerException se String example = null
. Quindi il programmatore deve eseguire il seguente controllo null sulla piastra di caldaia:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
Immagino che sarebbe stato molto più conveniente se String
avessero avuto versioni statiche di questi metodi (forse anche esclusivamente ), che avrebbe preso la stringa di input come primo argomento:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Ciò avrebbe portato a un codice più pulito scritto dai programmatori che si sarebbe automaticamente occupato di casi nulli semplicemente restituendo null, piuttosto che forzare i programmatori a gestire esplicitamente casi nulli. La restituzione di null ha senso per me poiché la manipolazione di una stringa null dovrebbe comportare una stringa null , non un errore.
Perché i progettisti Java non hanno pensato a questo quando hanno progettato la String
classe in Java 1 o Java 2 o addirittura hanno aggiunto tale funzionalità in una versione Java successiva?
null
è uno stato eccezionale e dovrebbe essere gestito in modo esplicito.
Maybe<T>
tipo, immagino?
string name = employee?.personalData?.name
. Proprio come una scorciatoia per tutti questi ripetitivi if (employee != null)
. Domanda SO correlata: stackoverflow.com/questions/1196031/…