Ниже приведен код для ленивой инициализации члена экземпляра. Это оставляет мне вопрос о том, когда выполнять проверку параметров. В коде есть две разные функции, выполняющие проверку NPE, один задерживает ее, а другой нет. Я выбрал первый вариант, но просто любопытно узнать, что такое отраслевая конвенция/лучшая практика.Должна ли выполняться проверка param lazily
public class FreeMain {
private List<Integer> fooList;
FreeMain () { }
/**
* This code does a check null pointer kind of just in time.
*
* @param barList
*/
public void putListExceptionCheckDoneLater(List<Integer> barList) {
if (this.fooList == null) {
if (barList == null) throw new NullPointerException();
this.fooList = barList;
}
}
/**
* In the even that fooList != null,
* throwing an exception would be of no benefit,
* since regardless of input, null or not, net effect would still be a no-op.
*
* @param args
*/
public void putListExceptionCheckDoneBefore(List<Integer> barList) {
if (barList == null) throw new NullPointerException();
if (this.fooList == null) {
this.fooList = barList;
}
}
public static void main(String[] args) {
}
}
Этого код специально разработан, чтобы задать конкретное сомнение, поэтому, пожалуйста, воздержитесь от вопросов как why not use constructor to pass list ?
и т.д., или предложить улучшения кода, которые не связаны с этим вопросом.
Я бы сказал, выполнить проверку параметров первой. Итак, я бы пошел с 'putListExceptionCheckDoneBefore'. Плюс, я думаю, что это более эффективно (* сэкономить чек *). – mre