【问题标题】:Check if Object has data or not?检查对象是否有数据?
【发布时间】:2015-02-20 05:19:00
【问题描述】:

我正在调用方法以根据传递的文本获取数据,该文本将 ping 到数据库。

所以我想检查是否有数据到达对象。

代码:

Method m = service.getMethodDataByFilter(text);

我试过了:

if(m == null){
    System.out.println("In NULL");
}

但它没有进入它。

我也试过了:

if(m.getName().isEmpty()){
    System.out.println("In NULL");
}

然后它抛出NPE,因为没有收到数据。

那么如何检查对象内部是否有数据呢?

方法类:

public class Method {
    private Integer id;
    private String name;
    // getter-setter
}

更新

试试Ruchira

    if(m== null){
        System.out.println("m is null");
    }else if(m.getName()==null){
        System.out.println("m.getName() is null");
    }else if(m.getName().isEmpty()){
        System.out.println("m.getName() is empty");
    }

仍然抛出相同的NPE

完整方法代码:

public MethodDTO getMethod(String text){
    Method m = service.getMethod(text);

    if(m == null){
        System.out.println("m is null");
    }else if(m.getName()==null){
        System.out.println("m.getName() is null");
    }else if(m.getName().isEmpty()){
        System.out.println("m.getName() is empty");
    }

    ModelMapper mapper = ModelMap.methodMapper();
    return mapper.map(m, MethodDTO.class);
}

【问题讨论】:

  • 请出示getMethodDataByFilter的代码
  • 因为m 不是nullm.getName()null
  • 请显示引发空指针异常的代码
  • 发布你的完整代码..和你得到的完整堆栈跟踪......异常是其他地方。
  • 我认为你的服务是空的。这就是它抛出空指针的原因

标签: java object null


【解决方案1】:

试试这个if ( m == null || m.getName()== null)。请注意,除了 m 之外,它的名称也可能是 null

【讨论】:

  • 不,if ( m == null || m.getName()== null)m.getName() 中仍然显示NPE
  • @JavaCuriousღ 没有而且永远不会..if ( m == null || m.getName()== null) 不会给你NPE
  • 我合理地假设getName 是一个简单的吸气剂。如果是这种情况,代码永远不会给出 NPE,因为|| 会短路
【解决方案2】:

您需要将代码更改为:

if(myObject==null){   // check if object is null
System.out.println("myObject is NULL");
}
else{ // myObject should not be null here
if(myObject.getField1()==null) // check for fields within the object
{
System.out.println("field1 is NULL");
}
if(myObject.getField2()==null)
{
System.out.println("field2 is NULL");
}
...
}

请注意,如果对象为空,则尝试访问其上的任何非静态字段/方法将导致 NPE。

【讨论】:

    【解决方案3】:

    解释。

    if(m == null){
      System.out.println("In NULL");
    }
    

    因为在if 里面,所以不能进入,因为m 不是null。但是

    if(m.getName().isEmpty()){
      System.out.println("In NULL");
    }
    

    这里你得到NullPointerException,因为m.getName()null

    所以你可以尝试如下

     if(m == null){
      System.out.println("m is null");
     }else if(m.getName()==null){
      System.out.println("m.getName() is null");
     }else if(m.getName().isEmpty()){
      System.out.println("m.getName() is empty");
     }
    

    【讨论】:

    • 那么如何检查m是否收到了数据?
    • @JavaCuriousღ 你可以查看我的最后一部分答案。
    • 已经尝试了所有 3 个,但它会在 m.getName()==null 处抛出 NPE,如果删除它,则会在 m.getName().isEmpty() 处抛出相同的结果。
    • @JavaCuriousღ 您必须验证所有步骤。编码不是跳过
    • @RuchiraGayanRanaweera - 我有点不同意.. mm.getName() 处于不同的水平。使用if(m==null){}else{ // check for fields of m.someMethod() here} 更有意义。
    【解决方案4】:
    m == null
    

    当对象 m 不为 null 但它不会在对象内递归检查其所有属性时,将返回 false。

    m.getName()
    

    似乎返回 null 但即使此语句也不会抛出 NPE。但是是的,如果你打电话给m.getName().isEmpty() 会抛出 NPE。你最好这样检查:

    if (m.getName() == null) //assuming you have already checked for m being null
    

    【讨论】:

    • 不,if (m.getName == null) 仍然抛出 NPE
    • @JavaCuriousღ m.getName 将在 m 为 null 或您在 getName 方法中做了一些愚蠢的事情时抛出 NPE。
    • 但是我没有在getName里面做任何傻事,只是初始化了值。
    • @JavaCuriousღ 使用最新副本更新您问题中的代码。
    【解决方案5】:

    检查对象是否为空:

    if(m != null && m.getName != null) {
     // Object m is not null and m.getName is also not null
    } else {
     // Either Object m is null or m.getName is null or both are null
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      相关资源
      最近更新 更多