Вопрос:
У меня есть класс, как показано
package com; public class Person { boolean registered; public boolean isRegistered() { return registered; } public void setRegistered(boolean registered) { this.registered = registered; } }
Объект Data to Person будет установлен на основе данных, присутствующих в БД. Проблема в том, что для старых записей зарегистрированная подача отсутствует.
так что я могу проверить, присутствует ли поданная или нет?
пакет com;
public class Test { public static void main(String args[]) { Person per = new Person(); if (per.isRegistered()) { } } }
Как я могу проверить, присутствует ли поле per.isRegistered() или нет для этого объекта Person?
Лучший ответ:
boolean – это примитивный тип данных, который не может быть нулевым, только может быть истинным или ложным. Но Boolean Object, который является рэпером типа логических данных, может иметь значение null и Boolean.TRUE и Boolean.FALSE;
public class Person { Boolean registered; … }
…
Person per = new Person(); if (per.isRegistered()!=null ) { if(!per.isRegistered()){ … }else{ … } } Ответ №1
Способ определения класса Person в данный момент невозможен, поскольку boolean (примитивный тип) не имеет null значения, только true и false.
Вы можете использовать Boolean (эквивалент объекта), который может быть null, Boolean.TRUE или Boolean.FALSE.
Но, скорее, вы хотите решить это на более глубоком уровне. Вы сказали, что у вас есть данные в вашей базе данных, для которых это поле отсутствует. Зарегистрированы ли эти записи или нет? Ваш класс должен отражать ответ на этот вопрос.
Ответ №2
boolean не может быть null; вам нужно будет использовать (Boolean) или построить составной тип.
Ответ №3
Вы можете использовать Boolean (капитал B) класс, который позволяет NULL значения для ссылок такого рода.
В качестве альтернативы вы можете использовать enum имеющее три возможных значения: NOT_AVAILABLE, YES, NO. Это имеет более четкую семантику и позволяет позже добавлять другие возможные значения (при необходимости).
Ответ №4
Вам нужно три состояния: логическое; true, false, а не там.
Вы можете добиться этого, используя Boolean class вместо примитивного логического и использовать null как индикатор “not there”.
Ответ №5
Я действительно не понимаю, что у тебя на уме. Но если вы хотите обрабатывать логическое значение, значения которого могут быть одним из следующих {true/false/null}, вы должны использовать Boolean объект с простой boolean оболочкой, но он может принимать null значение (поскольку каждый объект Java может будет установлено значение null).
Ответ №6
boolean registered как поле false по умолчанию. Более того, boolean не связанное с классом Object но примитивное значение, поэтому не может быть null.
Только один Null-указатель, вы можете получить здесь, когда per это null
Ответ №7
Сделайте столбец нулевым и используйте логическое значение вместо логического. Однако для конкретной проблемы, я думаю, вы можете предположить, что если она равна нулю, пользователь не зарегистрирован.
Ответ №8
Вы должны расширить класс человека, чтобы использовать его в тестовом классе. Вы также должны определить логическое значение.
Ответ №9
Вы должны использовать опцию
if (Optional.ofNullable(per.isRegistered()).orElse(false)) { // … }