Java设计人员为什么不在类中创建字符串操作方法的静态版本java.lang.String
?我指的是以下方法,但是问题也可以扩展到该类中的其他非静态方法。
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)
仅使用这些方法的非静态版本会在必须调用此方法的任何地方强制进行显式 null检查。例如,简单的调用example = example.trim()
会导致NullPointerException异常如果String example = null
。因此,程序员必须执行以下样板空检查:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
我想如果String
拥有这些方法的静态版本(也许甚至是专有方法)会更方便,它将输入字符串作为第一个参数:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
这将导致由程序员编写的更干净的代码,该代码将通过简单地返回null来自动处理null情况,而不是强迫程序员显式处理null情况。该空的回归对我来说很有意义,因为操纵一个空字符串应导致空字符串,而不是一个错误。
Java设计人员为什么String
在用Java 1或Java 2 设计类时甚至在以后的Java版本中添加此类功能时都没有想到这一点?
null
是一种例外状态,应进行明确处理。
Maybe<T>
我猜这是一个类型的较差的重新实现吗?
string name = employee?.personalData?.name
。就像所有这些重复if (employee != null)
s 的捷径一样。相关SO问题:stackoverflow.com/questions/1196031/...