Dlaczego projektanci Java nie stworzyli statycznych wersji metod manipulacji ciągami w java.lang.String
klasie? Odnoszę się do następujących metod, ale pytanie można rozszerzyć również na inne metody niestatyczne w klasie.
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)
Posiadanie tylko niestatycznych wersji tych metod wymusza jawne sprawdzanie wartości NULL wszędzie tam, gdzie taka metoda musi zostać wywołana. Na przykład zwykłe wywołanie example = example.trim()
prowadziłoby do NullPointerException if String example = null
. Dlatego programista musi wykonać następujące sprawdzenie wartości zerowej płyty kotłowej:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
Wyobrażam sobie, że znacznie wygodniej byłoby String
mieć statyczne wersje tych metod (być może nawet wyłącznie ), które przyjmowałyby ciąg wejściowy jako pierwszy argument:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Doprowadziłoby to do czystszego kodu napisanego przez programistów, który automatycznie zajmowałby się zerowymi przypadkami, po prostu zwracając null, zamiast zmuszania programistów do jawnej obsługi przypadków zerowych. Powrocie null sens dla mnie, ponieważ manipulowanie zerowy ciąg powinno skutkować pustym ciągiem, a nie błędów.
Dlaczego projektanci Java o tym nie pomyśleli, projektując String
klasę w Javie 1 lub Java 2, ani nawet nie dodając takiej funkcjonalności w późniejszej wersji Java?
null
jest stanem wyjątkowym i należy go traktować wyraźnie.
Maybe<T>
Chyba słaba reimplementacja tego typu?
string name = employee?.personalData?.name
. Tak jak skrót do wszystkich tych powtarzających się if (employee != null)
s. Powiązane SO pytanie: stackoverflow.com/questions/1196031/...