字段为null时,get方法取值抛出空指针异常java.lang.NullPointException解决方法
今天打码的时候,做一个取Integer值字段,万万没想到该字段会有存在null值得情况,结果给抛异常了,实在给人留下了不好的印象。
那行吧,就用了Optional下的ofNullable方法来判断解决问题。
例如:
A a = new A;
int age = a.getAge();
System.out.println("年龄是:"+ age);
如果Age为null时,执行到第二行代码就会抛出null指针异常的情况
解决:
A a = new A;
Optional<Integer> age = Optional.ofNullable(a.getAge());
System.out.println("年龄是:"+ age.hashCode);
原理:
我们来看一下 ofNullable的源码
该方法也比较容易理解:
执行ofNullable()方法,如果T对象为空,执行empty()方法;不为空,执行of(value)方法;
而empty()方法又是怎么样的呢,我们也看源码
即:执行empty()时,返回一个空对象Optional。注意:空对象不等于null,是不一样的
以上,可见Optional.ofNullable()可解决该问题(取值时通过hashCode()来取即可)
本来感觉到此为止即可解决问题…
奈何该方法是java 8才有的方法…
而服务器上用的jdk 1.7…
----------------------------------------------分割线--------------------------------------------
那行吧,那就用if else来随便解决得了…
哪知道,if else来判断也有讲究的…
例如:
(还是Age为null的情况)
A a = new A;
if(a.getAge() != null){
int age = a.getAge();
System.out.println("年龄是:"+ age);
}
抛异常了...
原因:在if判断条件里边,执行a.getAge()就抛异常了,都还没来得及和null做判断,结果显而易见
解决:
A a = new A;
if(null != a.getAge()){
int age = a.getAge();
System.out.println("年龄是:"+ age);
}
正常运行...
最终建议:以后在做跟null做条件判断时应该把null放在条件前面,把变量还在后边