Почему разработчики 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)
с. Соответствующий вопрос SO: stackoverflow.com/questions/1196031/…