Використовуйте Objects.requireNonNull(Object)
для цього.
Перевіряє, чи вказана посилання на об'єкт не є нульовою. Цей метод призначений головним чином для перевірки параметрів у методах та конструкторах, [...]
У вашому випадку це було б:
public void useObject(CustomObject customObject) {
object = customObject.getObject();
Objects.requireNonNull(object);
// Do stuff using object, which would throw a NPE if object is null.
}
Ця функція зроблена для зазначених вами цілей, тобто чітко позначте те, що не повинно бути недійсним; також у виробництві. Велика перевага полягає в тому, що ви переконайтеся, що знайдете нульові значення саме там, де вони не повинні виникати в першу чергу. У вас буде менше проблем з налагодженням помилок, викликаних нульовими значеннями, переданими десь там, де вони не повинні бути.
Ще однією перевагою є додаткова гнучкість щодо нульових перевірок на відміну від assert
. Хоча assert
це ключове слово для перевірки булевого значення, Objects.requireNonNull(Object)
є функцією, і тому його можна вбудувати в код набагато більш гнучким і читабельним. Наприклад:
Foo foo = Objects.requireNonNull(service.fetchFoo());
// You cannot write it in on line.
Bar bar = service.fetchBar();
assert bar != null;
service.foo(Objects.requireNonNull(service.getBar()));
// You cannot write it in on line.
Bar bar = service.getBar();
assert bar != null;
service.foo(bar);
Майте на увазі, що Objects.requireNonNull(Object)
це виключно для перевірки нуля, де assert
узагальнено. assert
має в цьому плані дещо інші цілі, тобто насамперед тестування. Це потрібно ввімкнути, щоб ви могли ввімкнути його для тестування та відключити його для виробництва. У будь-якому разі не використовуйте його для виробничого коду. Це може уповільнити додаток із непотрібними та складними перевірами, які призначені для тестування. Використовуйте його для відокремлення перевірок, призначених лише для тестування, від перевірок, які також призначені для виробництва.
Перегляньте офіційну документацію, щоб отримати детальну інформацію про assert
.
-ea
або еквівалент.