Чому дизайнери 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)
Наявність лише нестатичних версій цих методів примушує явну перевірку нульової перевірки в будь-якому місці такого методу потрібно викликати. Наприклад, просто виклик 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);
Це призвело б до отримання більш чистого коду, написаного програмістами, який би автоматично піклувався про нульові випадки, просто повернувши нуль, а не змушуючи програмістів явно обробляти нульові випадки. Повернення нуля має сенс для мене , так як маніпулювання нульовий рядки повинна привести до нульової рядку, а не про помилку.
Чому дизайнери Java не думали про це, коли розробляли String
клас на Java 1 або Java 2, або навіть додавали таку функціональність у більш пізній версії Java?
null
є винятковим станом і з ним слід звертатися явно.
Maybe<T>
Думаю , це погана реалізація типу.
string name = employee?.personalData?.name
. Так само як ярлик для всіх цих повторюваних if (employee != null)
s. Питання, пов'язані ТА: stackoverflow.com/questions/1196031/…