Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中检查属性(对象)是否为null_Java_Object_Null_Parent Child - Fatal编程技术网

如何在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;
}

这可能会引起争议,因为您可以使用异常来执行此操作。

您需要重新设计代码并使其更加模块化。然后,您将能够通过一些进行检查的方法对布局进行流式处理。如果你不提供完整的结构,很难给你具体的细节。很抱歉没有提供,我正在一个没有复制权限的虚拟机上工作,这是一个巨大的结构。你的意思是,在每个对象上放置一个方法,然后用它进行验证吗?不,我的意思是改变你的结构,你可以简单地在所有有问题的对象上循环,因此只需要几行就可以了。但这是一个更广泛的方式,以获得更多的具体在这里。例如,为什么有这么多的对象漂浮在周围,而不是在某个集合中等等。递归反射可能会有帮助,我认为您需要重新设计代码,使其更加模块化。然后,您将能够通过一些进行检查的方法对布局进行流式处理。如果你不提供完整的结构,很难给你具体的细节。很抱歉没有提供,我正在一个没有复制权限的虚拟机上工作,这是一个巨大的结构。你的意思是,在每个对象上放置一个方法,然后用它进行验证吗?不,我的意思是改变你的结构,你可以简单地在所有有问题的对象上循环,因此只需要几行就可以了。但这是一个更广泛的方式,以获得更多的具体在这里。例如,为什么会有这么多的对象漂浮在周围而不是在某个集合中等。我认为递归反射可能会有帮助