Por que os designers de Java não criaram versões estáticas dos métodos de manipulação de string na java.lang.String
classe? Os métodos a seguir são os que me refiro, mas a pergunta também pode ser estendida a outros métodos não estáticos da 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)
Ter apenas versões não estáticas desses métodos força a verificação nula explícita em qualquer lugar em que esse método precise ser chamado. Por exemplo, simplesmente chamar example = example.trim()
levaria a NullPointerException if String example = null
. Portanto, o programador deve fazer a seguinte verificação nula padrão:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
Eu imagino que teria sido muito mais conveniente se String
tivesse versões estáticas desses métodos (talvez até exclusivamente ), que usariam a string de entrada como o primeiro argumento:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Isso levaria a um código mais limpo, escrito por programadores, que cuidaria automaticamente de casos nulos simplesmente retornando nulo, em vez de forçar os programadores a lidar explicitamente com casos nulos. O retorno de null faz sentido para mim, pois a manipulação de uma string nula deve resultar em uma string nula , não em erro.
Por que os designers de Java não pensaram nisso quando criaram a String
classe em Java 1 ou Java 2, ou mesmo adicionaram essa funcionalidade em uma versão Java posterior?
null
é um estado excepcional e deve ser tratado explicitamente.
Maybe<T>
tipo, eu acho?
string name = employee?.personalData?.name
. Apenas como um atalho para todos esses repetitivos if (employee != null)
. Pergunta relacionada ao SO: stackoverflow.com/questions/1196031/…