Как обрабатывать конструктор, инициализированный нулем?

Пусть есть класс A. Класс B выглядит следующим образом:

public class B {

    private int anInt;
    private String aString;
    ...

    public B(A initObj) {
       anInt = initObj.getIntField();
       aString = initObj.getStringField();
       ...
    }

    ...
}

Если initObj - это null, то наиболее целесообразно, чтобы объект B также был нулевым. Но, согласно интернету, конструктор Java не может вернуть значение NULL.

Очевидно, лучше всего проверить сторону кода, вызывающую конструктор для B, чтобы не вызывать конструктор с нулевым аргументом. Но, если предположить, что такая возможность возникает, как лучше всего справиться с этой ситуацией?

Как лучше всего справиться с ситуацией, когда B инициализируется с помощью null?

вы можете включить проверку внутри конструктора для B, например -> if (initObj!=null){//your initialization code}, чтобы вы знали, что аргумент с нулевым значением позаботится о

mettleap 28.10.2018 02:42

@mettleap Итак, это была моя первая мысль, но потом я понял, что у меня есть этот фиктивный объект без каких-либо данных, который вообще маскируется под реальный объект, просто ожидающий, чтобы что-то сломать по течению. Я понял, что лучше просто выбросить исключение в этот момент.

kingledion 28.10.2018 02:50

может заводской выкрой? что-то вроде B.getNewInstance (initObj); который вернет либо null, если initObj имеет значение null, либо экземпляр B, если initObj действителен?

Angel Koh 28.10.2018 03:17

кинь Exception, чем быстрее, тем лучше. Думаю, guava "изобрела" эти Preconditions в java, а jdk использует их через Object::requireNonNull и т.п.

Eugene 28.10.2018 03:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
757
1

Ответы 1

У вас есть несколько вариантов в зависимости от того, что вы хотите сделать в своем приложении. Вы можете изменить подпись конструктора B, чтобы принимать параметры int и String вместо A. Таким образом, вызывающий должен иметь дело с возможно нулевым initObj, и B не должен иметь дело с потенциально нулевыми аргументами в конструкторе. Конструктор также может выполнить нулевую проверку initObj и либо не инициализировать поля B, если это допустимое состояние для B, либо выдать исключение, если это действительно недопустимо.

Другие вопросы по теме