详解Java如何有效避免空指针
作者:shigen01
空指针,也就是NullPointerException 简称NPE的,怕一下子写出NPE,部分的伙伴看不懂,索性就改成了空指针,在实际的开发中,我们最讨厌的就是遇到空指针了,业务跑着跑着发现了空指针,所以本文详细介绍了Java如何有效的避免空指针,需要的朋友可以参考下
其实在阿里巴巴的《Java开发手册》里边,空指针,也就是NullPointerException
简称NPE的,怕一下子写出NPE,部分的伙伴看不懂,索性就改成了空指针。下文的空指针异常,我们用NPE
表示。
在实际的开发中,我们最讨厌的就是遇到空指针了,业务跑着跑着发现了空指针。通过shigen
的总结,多数的空指针都是从数据库中带来的,在这篇文章中,shigen
就有讲到尽可能用not null定义字段。
但是,所有的这些都是理想的状态,并不是每个人或者每个开发团队都会遵守这个规约的。遇到这样的项目,我们除了去改也没有办法。除了用java8的新特性Option
外,shigen
也写了一个工具类,实现了空指针的控制问题。那就先来看看代码吧。
public class ObjectUtil { /** * 把对象中的 String 类型的null字段,转换为空字符串 * * @param <T> 待转化对象类型 * @param object 待转化对象 * @param fieldName 字段名字 */ public static <T> void noNullStringAttr(T object, String fieldName) { Field[] fields = object.getClass().getDeclaredFields(); if (fields.length == 0) { return; } for (Field field : fields) { if ("String".equals(field.getType().getSimpleName())) { field.setAccessible(true); try { Object value = field.get(object); if (value == null && field.getName().equals(fieldName)) { field.set(object, ""); } } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } } } }
这个代码其实就是用到了范型,我们传入对应的对象和对象的属性名字,通过反射获得字段的值,如果字段的值是空的,就让字段的值设置成空字符串,而不是null
。这样,我们在使用的时候就会很好的避免到空指针的问题。
当然,我们的方法也可以稍微改造一下,直接把字段值为空的字段设置成默认值或者其它值,这个都是可以进一步的优化的。还是那句话:具体问题具体分析。
那使用起来也很简单,先看我怎么使用的吧。
public static void main(String[] args) { // 构造参数:status, msg, data Result<Object> result = new Result<>(200, null, null); ObjectUtil.noNullStringAttr(result, "msg"); System.out.println(result); User user = new User().setUsername("abc").setPassword(null); ObjectUtil.noNullStringAttr(user, "password"); System.out.println(user); ObjectUtil.noNullStringAttr(user, "username"); System.out.println(user); }
输出是这样的:
如果有值,我们就不管,没有值,就把字段的值设置成空字符串。
当然,用反射的方式也会破坏对象的结构,造成性能的损耗。哎,只是一个补救的办法,还是能规范就规范起来,这样才能解决很多不必要的麻烦。
以上就是详解Java如何有效避免空指针的详细内容,更多关于Java避免空指针的资料请关注脚本之家其它相关文章!