如何在Java中检查属性(对象)是否为null
我需要报表的特定数据,然后从父对象获取所有信息如何在Java中检查属性(对象)是否为null,java,object,null,parent-child,Java,Object,Null,Parent Child,我需要报表的特定数据,然后从父对象获取所有信息 Object1 它有很多属性,对象属性 if(object1.getIdObject11()!=null) { if(object1.getIdObject11().getIdObject111()!=null) { if(object1.getIdObject11().getIdObject111().getIdObject1111()!=null) { //... }
Object1
它有很多属性,对象属性
if(object1.getIdObject11()!=null) {
if(object1.getIdObject11().getIdObject111()!=null) {
if(object1.getIdObject11().getIdObject111().getIdObject1111()!=null) {
//...
}
}
}
Object11、Object12、Object13、attr1、attr2…
属性也有很多属性
Object111、Object131、Object132,…
现在我得到了5个级别的数据属性
当我将信息发送到报告时,它会显示错误:原因:null
object1.getIdObject11().getIdObject111().getDescription代码>
因为Object111为空,所以它显示错误
我试着用
object1.getIdObject11().getIdObject111().getDescription==null?“”:object1.getIdObject11().getIdObject111().getDescription代码>
但它只验证描述是否为null,并抛出相同的错误
然后我试图验证这个对象
if(object1.getIdObject11().getIdObject111() == null) {
var = object1.getIdObject11().getIdObject111().getDescription;
} else {
var = "";
}
但当Object11为null时,它抛出相同的错误
我不认为对每个属性都这样做是一个好方法(必须得到大约30个属性)
我想验证是否存在空对象,如果存在,则设置“”(空白),没有这么大的代码(因为获取的参数是在报表中设置的,与字母混合)
reportline1=“区域:”+object1.getIdObject11().getIdObject111().getName代码>我可能会这样做,以便在将来轻松地扩展代码的功能,这种方式可能需要在开始时编写一些代码,但将很容易永远使用
我将在父类中创建一个名为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
方法。我将来可能会这样做,以便轻松地扩展代码的功能,这可能需要在开始时编写一些代码,但永远都可以轻松使用
我将在父类中创建一个名为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
}
如果您只希望它在最低级别上切换值,并且在这两种情况下都不需要执行任何操作,则还可以将此方法设置为“无效”
。代码中断。这就是为什么最好重构设计本身。
作为一种解决方法,您可以使用Optional
var = Optional.ofNullable(object1)
.map(o -> o.getIdObject11())
.map(o -> o.getIdObject111())
.map(o -> o.getDescription())
.orElse("")
你的密码被破解了。这就是为什么最好重构设计本身。
作为一种解决方法,您可以使用Optional
var = Optional.ofNullable(object1)
.map(o -> o.getIdObject11())
.map(o -> o.getIdObject111())
.map(o -> o.getDescription())
.orElse("")
我更喜欢给德哈西的解决方案
但你也可以这样做:
getOrElse(()->object1.getIdObject11().getIdObject111().getDescription(),“”)
其中getOrElse
是:
public static T getOrElse(供应商getter,T elseValue){
试一试{
返回getter.get();
}捕获(例外e){
//记录或处理它
}
返回elseValue;
}
这可能会引起争议,因为您可以使用Exception来执行此操作。我更喜欢提供dehasi的解决方案
但你也可以这样做:
getOrElse(()->object1.getIdObject11().getIdObject111().getDescription(),“”)
其中getOrElse
是:
public static T getOrElse(供应商getter,T elseValue){
试一试{
返回getter.get();
}捕获(例外e){
//记录或处理它
}
返回elseValue;
}
这可能会引起争议,因为您可以使用异常来执行此操作。您需要重新设计代码并使其更加模块化。然后,您将能够通过一些进行检查的方法对布局进行流式处理。如果你不提供完整的结构,很难给你具体的细节。很抱歉没有提供,我正在一个没有复制权限的虚拟机上工作,这是一个巨大的结构。你的意思是,在每个对象上放置一个方法,然后用它进行验证吗?不,我的意思是改变你的结构,你可以简单地在所有有问题的对象上循环,因此只需要几行就可以了。但这是一个更广泛的方式,以获得更多的具体在这里。例如,为什么有这么多的对象漂浮在周围,而不是在某个集合中等等。递归反射可能会有帮助,我认为您需要重新设计代码,使其更加模块化。然后,您将能够通过一些进行检查的方法对布局进行流式处理。如果你不提供完整的结构,很难给你具体的细节。很抱歉没有提供,我正在一个没有复制权限的虚拟机上工作,这是一个巨大的结构。你的意思是,在每个对象上放置一个方法,然后用它进行验证吗?不,我的意思是改变你的结构,你可以简单地在所有有问题的对象上循环,因此只需要几行就可以了。但这是一个更广泛的方式,以获得更多的具体在这里。例如,为什么会有这么多的对象漂浮在周围而不是在某个集合中等。我认为递归反射可能会有帮助