Java 检查对象是否有数据?
我正在调用方法以根据传递的文本获取数据,该文本将ping到数据库中 所以我想检查是否有数据到达对象中 代码:Java 检查对象是否有数据?,java,object,null,Java,Object,Null,我正在调用方法以根据传递的文本获取数据,该文本将ping到数据库中 所以我想检查是否有数据到达对象中 代码: Method m = service.getMethodDataByFilter(text); 我试过: if(m == null){ System.out.println("In NULL"); } 但它并没有进入它的内部 我也尝试过: if(m.getName().isEmpty()){ System.out.println("In NULL"); } 然后,由
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
}
更新
试一试
仍然抛出相同的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);
}
您需要将代码更改为:
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");
}
...
}
注意:如果对象为null,那么尝试访问该对象上的任何非静态字段/方法将导致NPE。如果(m==null | | m.getName()==null)尝试此。注意,除了m之外,它的名称也可以是null
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 != 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
}
解释
if(m == null){
System.out.println("In NULL");
}
自内if
未输入,因为m
不是null
。但是
if(m.getName().isEmpty()){
System.out.println("In NULL");
}
因为m.getName()
是null
,所以在这里可以得到NullPointerException
m == 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");
}
检查对象是否为空,如下所示:
if (m.getName() == null) //assuming you have already checked for m being null
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
}
请显示getMethodDataByFilter
的代码,因为m
不是null
而是m。getName()
是null
请显示它抛出空指针异常的代码发布完整代码。。和完整的堆栈跟踪你正在得到。。。例外是其他地方。我认为你的服务是空的。这就是为什么它抛出null pointerNo,如果(m.getName==null)
仍然抛出NPE
@javakillerღ m、 当m为null或者在getName方法中做了一些愚蠢的事情时,getName将抛出NPE。但是我在getName
中没有做任何愚蠢的事情,只是初始化了该值。@javakillღ 使用最新副本更新问题中的代码。否,如果(m==null | | m.getName()==null)
仍在m.getName()中显示NPE
ღ 不,永远不会如果(m==null | | m.getName()==null)
不会给你NPE
我做出合理的假设,getName
是一个简单的getter。如果是这种情况,代码将永远不会给出NPE,因为|
将短路。那么如何检查m
是否接收到数据?@javakillerღ 你可以检查我的答案的最后一部分。在没有其他选项的情况下尝试了所有3个选项,但它在m.getName()==null
处抛出NPE
,如果删除它,则在m.getName().isEmpty()处抛出相同的选项ღ 您必须验证所有步骤。编码不是一个简单的问题skipping@RuchiraGayanRanaweera-我有点不同意m
和m.getName()
处于不同的级别。使用if(m==null){}else{//检查m.someMethod()的字段,这里}
更有意义。