¿Por qué los diseñadores de Java no crearon versiones estáticas de métodos de manipulación de cadenas en la java.lang.String
clase? A los que me refiero son los siguientes métodos, pero la pregunta también puede extenderse a otros métodos no estáticos en la clase.
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)
Tener solo versiones no estáticas de estos métodos obliga a la comprobación nula explícita en cualquier lugar al que deba llamarse dicho método. Por ejemplo, simplemente llamar example = example.trim()
conduciría a NullPointerException si String example = null
. Por lo tanto, el programador tiene que hacer la siguiente comprobación nula repetitiva:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
Me imagino que habría sido mucho más conveniente si String
hubiera versiones estáticas de estos métodos (quizás incluso exclusivamente ), que tomarían la cadena de entrada como primer argumento:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Esto habría llevado a un código más limpio escrito por programadores que se habría ocupado automáticamente de los casos nulos simplemente devolviendo nulo, en lugar de obligar a los programadores a manejar explícitamente los casos nulos. La devolución de nulo tiene sentido para mí, ya que manipular una cadena nula debería dar como resultado una cadena nula , no un error.
¿Por qué los diseñadores de Java no pensaron en esto cuando diseñaron la String
clase en Java 1 o Java 2, o incluso agregaron esa funcionalidad en una versión posterior de Java?
null
es un estado excepcional y debe manejarse explícitamente.
Maybe<T>
tipo, supongo.
string name = employee?.personalData?.name
. Solo como un atajo para todos estos if (employee != null)
s repetitivos . Pregunta SO relacionada: stackoverflow.com/questions/1196031/…