Повторное использование строки в Java

#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 произойти «естественным образом»».» — Я думаю, что быстрый отказ-это лучший подход