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 ifになり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のケースを処理するプログラマーによって記述されたよりクリーンなコードになります。ヌルの返却は操作以来、私には理にかなってヌル文字列が生じるはずであるヌル文字列ではなく、エラーが発生しました。
String
Java 1またはJava 2でクラスを設計したときに、Javaデザイナーがこれを考えなかったのはなぜですか。また、後のJavaバージョンでそのような機能を追加したのでしょうか。
null
例外的な状態であり、明示的に処理する必要があります。
Maybe<T>
型の再実装が不十分だと思いますか?
string name = employee?.personalData?.name
。これらすべての繰り返しif (employee != null)
のショートカットとして。関連のSOの質問:stackoverflow.com/questions/1196031/...