#java
Вопрос:
У меня есть такой распространенный класс утилит, он выглядит так:
public final class Utils {
public static <T> T forNull(T object, String objectName) {
if (object == null)
throw new NullPointerException(String.format(""%s" must not be null", objectName));
return object;
}
}
…и мне интересно, стоит ли удалять эту строку -> > ""%s" must not be null"
из метода и объявлять ее статической окончательной. Этот метод будет использоваться часто.
Комментарии:
1. Незначительный момент, но я бы использовал одинарные кавычки в вашем сообщении об ошибке. а. это лучшая грамматика и б. вероятность того, что объект будет выглядеть так, как если бы он был a
String
(когда это может быть не так), будет меньше2. Вы можете написать это сами, но это уже делалось раньше: Объекты.requireNonNull
Ответ №1:
Строки литералов Java уже кэшируются JVM. Независимо от того, выполняется ли этот метод несколько раз, строковый объект, используемый при этих исполнениях, будет одинаковым, поэтому производительность не будет проблемой.
Я бы предложил переместить такую строку в статическое поле, если вы собираетесь использовать эту строку в нескольких местах. Это облегчает работу по техническому обслуживанию, поскольку вы редактируете текст в одном месте, а не во всех используемых методах.
Ответ №2:
Строковые константы уже дедуплицируются автоматически (это называется «стажировка»). Если одно и то же сообщение используется повторно в разных контекстах, возможно, имеет смысл его экстернализировать, но тогда вам придется сбалансировать это с отделением его формата от локального контекста.
Тем не менее, я приведу примерный ответ на ваш вопрос: у меня вообще нет этого метода. Обычно рекомендуемый подход заключается не в активном тестировании на null, а в том, чтобы NPE происходили «естественным образом». С другой стороны, Objects.requireNonNull
он уже существует, и нет необходимости изобретать его заново.
Комментарии:
1. «Обычно рекомендуемый подход заключается не в активном тестировании на null, а в том, чтобы позволить NPE произойти «естественным образом»».» — Я думаю, что быстрый отказ-это лучший подход