Вместо стандартной реализации списка, используйте анонимный класс, который переопределяет метод add
и добавляет специальный код, чтобы проверить, является ли добавленный объект пустым, например:
List<T> list = new ArrayList<T>() {
public boolean add(T e) {
if (e == null) {
throw new NullPointerException("Attempt to add null to list");
}
return super.add(e);
}
};
Вы должны аналогичным образом переопределитьвсе "добавить" методы, чтобы быть уверенным.Когда код добавляет ноль, он взорвется, и вы увидите исключение в журнале и сможете увидеть, кто это сделал, проверяет трассировку стека.
EDITED
Чтобы было понятно, это невозможно для объекта в списке "стать null
".Вы можете добавить a null
или удалить объект из Списка, но объект уже в Список будет оставаться там до тех пор, пока не будет удален.
Для ясности, только способ для null
попасть в список - это поместить его туда - т.е. добавить его одним из методов add()
или addAll()
метод.Одновременные проблемы с модификацией могут не вызвать эту проблему (вы можете получить ConcurrentModificationException
, но это все равно не добавит null
).
Код, такой как
Object o = list.get(1);
o = null;
, не имеет никакого эффекта, потому что вы просто обнуляете копию ссылки на объект - list
все еще ссылка на объект.
Однако, в зависимости от конструкции объектов Bean
, они могут быть изменяемыми.В то время как ссылка на объект Бина останется нетронутой, некоторые поля в Бина могут стать null
.Чтобы поймать это, вам нужно будет кодировать установщики для взрыва, когда передается аргумент null
, либо переписывая класс, либо перегружая сеттеры через анонимный класс (аналогично моему первоначальному предложению выше).