发表于: 2018-01-20 22:40:30
0 579
一.今日完成
在写接口过程中,多次遇到需要对字符串,泛型对象,集合对象以及pojo进行判空,除了用作条件判断外,有时候是为了避免空指针异常,把Java中判断String不为空的方法梳理一遍,至于集合或泛型,考虑(!= null && ! isEmpty())即可,而对于pojo判空可以转换为对string对象的判空.
1.判断一个字符串str不为空的方法有:
(1) str!=null;
(2) "".equals(str);
(3) str.length()!=0;
( length是属性,一般集合类对象拥有的属性,取得集合的大小。而length()是方法,一般字符串类对象有该方法,也是取得字符串长度。)
说明:
1) null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。
2)""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。
3) null不是对象,""是对象,所以null没有分配空间,""分配了空间,例如:
String str1 = null; str引用为空
String str2 = ""; str引用一个空串
str1还不是一个实例化的对象,str2已经实例化。
对象用equals比较,null用等号比较。
如果str1=null;下面的写法错误:
if(str1.equals("")||str1==null){ }
正确的写法是 if(str1==null||str1.equals("")){ //先判断是不是对象,如果是,再判断是不是空字符串 }
所以,判断一个字符串是否为空,首先就要确保不是null,然后再判断长度。
String str = xxx;
if(str != null && str.length() != 0) { }
2.为避免NullPointerException,几种常见处理方法如下
1)用valueOf代替toString
javaBigDecimal bd = getPrice();
// good
String.valueOf(bd);
// not good
bd.toString();
2)函数尽量不要返回null,而是返回一个空的对象
Collections辅助类中有静态的 EMPTY_LIST EMPTY_SET EMPTY_MAP ,可以方便的使用它们
javapublic List<Integer> f() {
try {
// ...
return result;
} catch (SomeException e) {
e.printStackTrace();
return Collections.EMPTY_LIST;
}
}
3)避免不必要的自动装箱
java// Integer getPrice();
int price = obj.getPrice();
注意getPrice返回的是Integer而不是int,因此有可能是null。当它是null的时候,赋值给int类型的变量就会抛出NullPointerException。
3.在复盘项目里,提供了一个工具类用于检查非空:DataUtils.isNotNullOrEmpty()和DataUtils.isNullOrEmpty(),把考虑判空的对象作为形参带入即可返回布尔型结果,基本满足大多数情况下的使用了,但由于这个工具类实现判空的方法较复杂,虽然便于使用但是封装严实,所以了解基本的判空操作还是十分必要.
二.明日计划
完善后台资料管理部分的列表页接口.理清业务逻辑
三.遇到问题
暂无.
四.收获
以上.
评论