Пусть есть класс 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?
@mettleap Итак, это была моя первая мысль, но потом я понял, что у меня есть этот фиктивный объект без каких-либо данных, который вообще маскируется под реальный объект, просто ожидающий, чтобы что-то сломать по течению. Я понял, что лучше просто выбросить исключение в этот момент.
может заводской выкрой? что-то вроде B.getNewInstance (initObj); который вернет либо null, если initObj имеет значение null, либо экземпляр B, если initObj действителен?
кинь Exception, чем быстрее, тем лучше. Думаю, guava "изобрела" эти Preconditions в java, а jdk использует их через Object::requireNonNull и т.п.




У вас есть несколько вариантов в зависимости от того, что вы хотите сделать в своем приложении. Вы можете изменить подпись конструктора B, чтобы принимать параметры int и String вместо A. Таким образом, вызывающий должен иметь дело с возможно нулевым initObj, и B не должен иметь дело с потенциально нулевыми аргументами в конструкторе. Конструктор также может выполнить нулевую проверку initObj и либо не инициализировать поля B, если это допустимое состояние для B, либо выдать исключение, если это действительно недопустимо.
вы можете включить проверку внутри конструктора для B, например ->
if (initObj!=null){//your initialization code}, чтобы вы знали, что аргумент с нулевым значением позаботится о