如何检查 Java 中的属性(对象)是否为空



我需要报告的特定数据,然后从父对象获取所有信息

Object1

它有很多属性,对象属性

Object11, Object12, Object13, attr1, attr2...

属性也有很多属性

Object111, Object131, Object132,..

到现在为止,我得到了 5 个级别的数据属性。

当我向报告发送信息时,它说,错误:原因:空

object1.getIdObject11().getIdObject111().getDescription;

它纠结错误,因为 Object111 为空

我试过使用

object1.getIdObject11().getIdObject111().getDescription==null?'':object1.getIdObject11().getIdObject111().getDescription;

但它只验证描述是否为空,并抛出相同的错误 然后我尝试验证对象

if(object1.getIdObject11().getIdObject111() == null) {
var = object1.getIdObject11().getIdObject111().getDescription;
} else {
var = "";
}

但是当 Object11 为 null 时,它会抛出相同的错误。

我认为对于每个属性执行此操作不是一个好方法(必须获得 30 个属性)

if(object1.getIdObject11()!=null) {
if(object1.getIdObject11().getIdObject111()!=null) {
if(object1.getIdObject11().getIdObject111().getIdObject1111()!=null) {
//...
}
}
}

我想验证是否有空对象并设置''(空白),如果有,没有这么大的代码(因为得到的参数是在报告中设置的,与字母混合)。

reportline1 = "Area: "+object1.getIdObject11().getIdObject111().getName;

你的代码违反了得墨忒耳定律。这就是为什么最好重构设计本身。 作为解决方法,您可以使用Optional

var = Optional.ofNullable(object1)
.map(o -> o.getIdObject11())
.map(o -> o.getIdObject111())
.map(o -> o.getDescription())
.orElse("")

我可能会这样做以在将来轻松扩展代码的功能,一开始可能需要一些编写,但将很容易永远使用。

我会在您的父类中创建一个名为hasNull的新方法,该方法返回如下boolean

public boolean hasNull()
{
boolean hasANull = false;
//Call another hasNull() inside of object11 which in turns calls hasNull() in object111 etc.
//If any of the calls return with a true/null value set hasANull to true
return hasANull;  
}

这反过来检查它包含的当前对象是否null。 如果其中一个类变量是您创建的另一个自定义类,则可以将另一个hasNull添加到该类中并继续前进,直到到达最低级别,在该级别中,您可以在null值时执行特定操作,例如将其设置为""

实现此功能后,您将能够在需要时随时使用它:

if (!object1.hasNull())
{
//Do whatever you want if there are no null values
}
else
{
//Do whatever you want if there is a null value
}

如果您只希望它切换最低级别的值,并且无论哪种情况都不需要执行任何操作,也可以将其设置为void方法。

我更喜欢给出 dehasi 的解决方案。

但你也可以做这样的事情:

getOrElse(() -> object1.getIdObject11().getIdObject111().getDescription(), "")

getOrElse在哪里:

public static <T> T getOrElse(Supplier<T> getter, T elseValue) {
try {
return getter.get();
} catch (Exception e) {
// log or do something with it
}
return elseValue;
}

使用异常来执行此操作可能会引起争议。

您可以使用此代码检查您的对象是否具有 null 属性,该对象是否myclass;

for (Field f : myclass.getClass().getDeclaredFields()) {
f.setAccessible(true);
try {
if (Objects.isNull(f.get(myclass))) {
isLineContainsNull = true;
}
} catch (Exception e) {
log.error(e.getMessage());
}
}

相关内容

  • 没有找到相关文章