Pourquoi les concepteurs Java n'ont-ils pas créé des versions statiques des méthodes de manipulation de chaînes dans la java.lang.String
classe? Je fais référence aux méthodes suivantes, mais la question peut également être étendue à d'autres méthodes non statiques de la 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)
Le fait de n'avoir que des versions non statiques de ces méthodes force une vérification nulle explicite partout où une telle méthode doit être appelée. Par exemple, un simple appel example = example.trim()
entraînerait NullPointerException if String example = null
. Le programmeur doit donc effectuer la vérification nulle du passe-partout suivante:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
J'imagine qu'il aurait été beaucoup plus pratique d' String
avoir eu des versions statiques de ces méthodes (peut-être même exclusivement ), qui prendraient la chaîne d'entrée comme premier argument:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Cela aurait conduit à un code plus propre écrit par les programmeurs qui aurait automatiquement pris en charge les cas nuls en renvoyant simplement null, plutôt que de forcer les programmeurs à gérer explicitement les cas nuls. Le retour de null a du sens pour moi, car la manipulation d'une chaîne nulle devrait entraîner une chaîne nulle , pas une erreur.
Pourquoi les concepteurs Java n'ont-ils pas pensé à cela lorsqu'ils ont conçu la String
classe en Java 1 ou Java 2, ou même ajouté une telle fonctionnalité dans une version Java ultérieure?
null
est un état exceptionnel et doit être traité explicitement.
Maybe<T>
type, je suppose?
string name = employee?.personalData?.name
. Tout comme un raccourci pour tous ces if (employee != null)
s répétitifs . Question SO connexe: stackoverflow.com/questions/1196031/…