По моему опыту, Java-приложения легче поддерживать, если «контракт» по умолчанию для любого API состоит в том, что null
значения параметров и null
результаты не разрешены. Если метод предназначен для разрешения аргумента null
или возвращает null
, значение и обстоятельства должны быть четко указаны в Javadoc.
Если передается null
там, где API специально не разрешает это, то это ошибка, и лучше всего выполнить быстрый отказ с NPE. (ИМО, нет необходимости документировать возможность NPE ... это можно предположить.) Если null
не является значимым (задокументированным) значением аргумента, практика тестирования для null
и возврата null
служит только для распространения неверных данных и усложняет отладку вашего кода. Если ваш метод использует предоставленный аргумент null
и это вызывает NPE, пусть будет так. Если аргумент не используется, но он сохраняет значение для использования в будущем, то стоит проверить на нулевое значение и явно выбросить NPE.
Я также стараюсь избегать (обычно ложных) оптимизаций использования null
для представления пустых списков или пустых массивов, по крайней мере на уровне API.
Теперь бывают ситуации, когда для разработки API имеет смысл использовать null
s; например в API, где параметр объекта реализует какое-либо поведение / политику плагина, или null
используется, если не указан необязательный параметр метода. Но вам нужно подумать об этом и задокументировать это.