Java中避免NullPointerException的一些方法
来源:互联网 发布:2017优化设计政治答案 编辑:程序博客网 时间:2024/06/10 12:16
在字符串常量上调用equals
// good"string literal".equals(strObject)// not goodstrObject.equals("string literal")
如果strOject == null
,那下面一种方法就会抛出NullPointerException
用valueOf代替toString
BigDecimal bd = getPrice();// goodString.valueOf(bd);// not goodbd.toString();
原因类似
使用null-safe的库
如Apache commons中的StringUtils,下面这些方法都不会抛出NullPointerException
StringUtils.isEmpty(null); // returns trueStringUtils.isBlank(null); // returns trueStringUtils.isNumeric(null); // returns falseStringUtils.isAllUpperCase(null); // returns false
函数尽量不要返回null,而是返回一个空的对象
Collections辅助类中有静态的EMPTY_LIST
EMPTY_SET
EMPTY_MAP
,可以方便的使用它们
public List<Integer> f() { try { // ... return result; } catch (SomeException e) { e.printStackTrace(); return Collections.EMPTY_LIST; }}
使用@NotNull @Nullable的注解
加上了注解,部分IDE会帮你检查可能为null的对象,或者你是否做了多余的检查。这个注解是JSR 305的一部分。但即使IDE不支持,这也会使代码的可读性变好。
注意加上的注解最好不要产生额外的依赖。java6中有@NotNull但它所在的包似乎并不默认就在JRE中,java8中有@NonNull,如果确定代码不用向下兼容,可以使用java8的@NonNull。
@NonNull List<String> strList; // A non-null list of Strings.List<@NonNull String> strList; // A list of non-null Strings.
避免不必要的自动装箱
// Integer getPrice();int price = obj.getPrice();
注意getPrice返回的是Integer而不是int,因此有可能是null。当它是null的时候,赋值给int类型的变量就会抛出NullPointerException。
定义合理的缺省值,以及利用数据库中的not null限制
public class A { private List<Integer> intList = new ArrayList<Integer>(); private String str = "";}
比如类中的成员都给初始化一个空的对象。以及数据库中not null的字段在java里我们就可以放心大胆的使用基本类型如int而不是Integer了。
实现一个表示null的类
这并不是通用的做法,对特定的业务逻辑比较有用。
有一个很好的例子就是著名JSON解析框架Jackson。以下代码是Jackson从一段JSON中获取其一级子节点lv1下的二级子节点lv2的内容:
JsonNode root = ...;JsonNode child = root.get("lv1").get("lv2");
以上代码很可能遇到lv1不存在的情况,因此第一个get()就会返回null,那么第二个get()执行时自然就抛出NullPointerException了。为了解决这个问题,作者提供了path方法来替代get方法:
JsonNode root = ...;JsonNode child = root.path("lv1").path("lv2");
当lv1不存在时,path()返回一个JsonNode的子类叫做MissingNode(但客户端暂时无需知道),MissingNode的path方法则继续返回MissingNode,这样无论这个链式调用写多长都不会抛出任何异常。
直到最后客户端调用完成后检查返回结果是否为MissingNode:
if (child.isMissingNode()) { ... }
- Java中避免NullPointerException的一些方法
- Java中避免NullPointerException的一些方法
- Java中避免NullPointerException的一些方法
- Java中避免NullPointerException的一些方法
- 避免Java的NullPointerException
- 避免Java应用中NullPointerException
- java应用避免NullPointerException的最佳方法@NotNull的使用
- Java String字符串类的equals方法如何避免NullPointerException
- 避免Java应用中NullPointerException的技巧和最佳实践
- 避免Java应用中NullPointerException的技巧和最佳实践
- 避免Java应用中NullPointerException的技巧和最佳实践
- 避免Java应用中NullPointerException的技巧和最佳实践
- 避免Java应用中NullPointerException的技巧和最佳实践
- 避免Java程序中NullPointerException的技巧和最佳实践
- 避免Java应用中NullPointerException的技巧和最佳实践
- 避免Java程序中NullPointerException的技巧和最佳实践
- 避免Java应用中NullPointerException的技巧和最佳实践
- 避免Java应用中NullPointerException的技巧和最佳实践
- 关于把Excel转换成word的经验
- Lua语法总结
- Android ViewPager+Fragment实现仿微信界面
- 设计模式六大原则
- 一行代码解决 sql语句 in传入数组变字符串
- Java中避免NullPointerException的一些方法
- java经典编程题
- imageView加载图片中setImageUri和setImageBitmap的区别
- 高斯算法实现毛玻璃背景图片
- 算法--偏差,方差,标准差,协方差,相关系数及相关理解
- openfire+smack添加好友申请 Smack 4.1.8 and 4.2.0-beta2 添加好友请求以及确认
- 实现微信和QQ图片加载显示进度的效果-LoadingProgress
- GIT贡献统计
- HelloCharts(一、LineChart)