Метод Objects.requireNonNull с добавлением Supplier
в Java 8, но я не уверен, в чем заявлено улучшение производительности:
Хотя это может дать преимущество в производительности в случае, отличном от null, при принятии решения о вызове этого метода следует позаботиться о том, чтобы затраты на создание поставщика сообщений были меньше, чем затраты на просто создание строковое сообщение напрямую.
Метод со строкой игнорирует параметр, если он не нулевой:
public static <T> T requireNonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}
Я нашел JDK-8011800: добавить java.util.Objects.requireNonNull(T, поставщик )а>
В JDK 7 java.util.Objects включал несколько методов для проверки на нуль, в том числе один, который принимал сообщение для возврата, если был найден нуль. С лямбда-выражениями в JDK 8 другим вариантом, который следует включить, является метод requireNonNull, который принимает поставщика строки вместо строки. Вот почему можно избежать затрат на создание строкового сообщения для ненулевого случая. Обратите внимание, что сбор лямбда-выражений может иметь ненулевую стоимость.
Комментарий указывает на отсутствие влияния на производительность:
Меня беспокоит ненулевая стоимость захвата. Я обеспокоен тем, что это часто сводит на нет все преимущества использования Поставщика. 04-09-2013
Я нашел другие вопросы, но не ссылался на (почему) отправка параметра String имеет затраты на производительность.
Это специфично для использования лямбда-выражений/потока?
StringBuilder
(или+
конкатенация),String.format
и, как я добавил к моему комментарию, вызов некоторых других методов (этот метод позволяет отложить создание сообщения до тех пор, пока не будет выполнена проверка на null) - если проверено объект не нулевой, нет необходимости создавать сообщение, но если метод получает сообщение в виде строки, это уже сделано - person user85421   schedule 16.01.2019requireNonNull(Object, String)
, этот метод позволяет отложить создание сообщения до тех пор, пока не будет выполнена проверка null - person Naman   schedule 16.01.2019Supplier
требует определенных затрат производительности, как и созданиеString
. Создание простой строки может быть дешевле, чем создание файлаSupplier
. Но если создание String по какой-то причине требует дорогостоящих операций и предполагается, чтоnull
встречается редко, может быть лучше создать поставщика и вызывать эти дорогостоящие операции только тогда, когда они действительно необходимы. - person Hulk   schedule 16.01.2019