在开发过程中经常会遇到NullPointerException空指针异常的问题,其中大部分是数据空指针报出来的;如以下情况均会发生异常;
-
定义了一个String变量 private String username = null;
public String getUsername() { return username; }
此时直接用username.toString()就会报异常,也可以用Strinv.valueOf()但这种方式返回的还是null;
其实对于String类型来说通过以下转换没什么意义; -
如果是接口直接返回的json数据里大部分属性返回的值基本是null且数据类型基本是大数据类型,如
Integer
Long
Double
UriList或String类型,如果还是通过上面1定义的方式去获取属性值的话;那么每个地方去获取或使用的地方都要加上判断(是否为null);主要有以下缺点:1.大量出现使用繁琐;2.如果有漏写之处(忘记加判断)或没有通过try cache捕获异常时很容易导致应用崩溃;3.在Android Studio自带的属性生成插件里暂做不到从属性定义里的注解里直接放到get或set里;即便能配出也没有办法是否为null值;
接下就来讲讲如果通过slcore属性生成器(http://tools.slcore.com/tools/default.html)快速生成想要的对象;
public class TestBean { /** * uri注解 */ private Uri uri = null; /** * 时间注解 */ private Long time = null; /** * name注释 */ private String name = null; /** * 数据id */ private Integer id = null; /** * 标签列表 */ private List<String> tagList = null; }此时我们打开以上提供的属性生成工具连接地址;
打之后ctrl+A全选你刚才定义好的变量,在左边的代码生成配置区域粘贴;(如下图)
根据图中的操作生成后的结果如下:
package com.rongxun.jrjr.Beans; import android.net.Uri; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2016/5/26. */ public class TestBean { /** * 获取uri注解 */ private Uri uri = null; /** * 获取时间注解 */ private Long time = null; /** * 获取name注释 */ private String name = null; /** * 获取数据id */ private Integer id = null; /** * 获取标签列表 */ private List<String> tagList = null; /** * 获取uri注解 */ public Uri getUri() { if (uri == null) { uri = Uri.EMPTY; } return uri; } /** * 设置uri注解 * @param uri */ public void setUri(Uri uri) { this.uri = uri; } /** * 获取时间注解 */ public Long getTime() { if (time == null) { time = (long)0; } return time; } /** * 设置时间注解 * @param time */ public void setTime(Long time) { this.time = time; } /** * 获取name注释 */ public String getName() { return name; } /** * 设置name注释 * @param name */ public void setName(String name) { this.name = name; } /** * 获取数据id */ public Integer getId() { if (id == null) { id = 0; } return id; } /** * 设置数据id * @param id */ public void setId(Integer id) { this.id = id; } /** * 获取标签列表 */ public List<String> getTagList() { if (tagList == null) { tagList = new ArrayList<String>(); } return tagList; } /** * 设置标签列表 * @param tagList */ public void setTagList(List<String> tagList) { this.tagList = tagList; } }
在对应的get方法里如果是空就会返回相应的默认值;那么在使用相应值的时候就可以放心的使用;