android之List<T>的空指针问题_List的初始化

在使用list做东西的时候出现空指针,查了半天资料本来是这样的 List model; LunchListAdapter adapter;//这是我重写的适配器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

大家好,又见面了,我是全栈君。

在使用list做东西的时候出现空指针,查了半天资料

本来是这样的

	List<Restaurant> model;
	LunchListAdapter adapter;//这是我重写的适配器
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		adapter = new LunchListAdapter(LunchList.this, R.layout.row, model);
		model = new ArrayList<Restaurant>();		
		.....//省略}	

重点在倒数两行,本来我把List的初始化放在了onCreate里面,心想应该没有问题的,activity启动之后就会对它初始化了,后来我尝试着在第一行就初始化,结果就不报空指针异常,

后来发现,在初始化之前竟然把他当参数传了出去,结果就导致了空指针异常.

修改如下,初始化在前,使用在后:

 List<Restaurant> model;
	LunchListAdapter adapter;//这是我重写的适配器
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
                  model = new ArrayList<Restaurant>();
		adapter = new LunchListAdapter(LunchList.this, R.layout.row, model);
				
		.....//省略}

虽然很简单,但还是要总结一下的,空指针害人太深.

对于List的初始化还是有些讲究的.

List是一个接口,这个一看文档便知,所以对它初始化不能new List,而应该使用ArrayList或者LinkList(这些实例化了List接口),

List<T> list = new ArrayList<T>();

而且,如果你确定List里面存放的数据类型,可以直接初始化为这种List,

List<String> list = new LinkedList<String>();

这样能够快速的处理,存取数据就不用再进行类型转换,直接是String就行了,

如果在初始化时是这样的,

List<Object> list = new LinkedList<Object>();

那么在存储时就能存储各种类型的数据了,int,String,Map,甚至是你自己定义的class都可以.

当然这样在存取时候是要进行类型转换的,效率会低一些.

 

还有,关于空指针错误真的是很困扰人的一件事情,所以最好的解决方式就是在使用前 一定要保证完成正确的初始化.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121432.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • es6模板字符串_es6字符串模板

    es6模板字符串_es6字符串模板模板字符串主要用于插入表达式!

    2022年8月21日
    8
  • 搭建自己的云计算平台

    1.Enomalism(http://www.enomaly.com/)云计算平台。Enomalism是一个开放源代码项目,它提供了一个功能类似于EC2的云计算框架。Enomalism基于Linux,同时支持Xen和KernelVirtualMachine(KVM)。Enomalism提供了一个基于TurboGearsWeb应用程序框架和Python的软件栈。

    2022年4月7日
    48
  • cadence快捷键大全(work bertrand russell)

    一、File相关Ctrl+Shift+N:新建一个窗口,即新打开一个ericCtrl+N:新建一个窗口,即编辑代码的窗口Ctrl+O:打开文件Ctrl+Shift+S:另存为Ctrl+Q:关闭eric二、Edit相关Ctrl+Z:撤回Ctrl+Shift+Z:撤回上次的撤回(你懂得,斜眼笑)Ctrl+Y:恢复到上次保存的状态Alt+Shift+C:清楚当前代…

    2022年4月16日
    87
  • 小议AutoEventWireup属性

    小议AutoEventWireup属性1.在web页面添加一个label和button控件ViewCode<%@PageLanguage=”C#”AutoEventWireup=”false”CodeFile=”AutoEventWireup属性.aspx.cs”Inherits=”_Default”%><!DOCTYPEhtmlPUBLIC”-//W3C//DT…

    2022年5月28日
    33
  • vs生成动态库及使用动态库

    vs生成动态库及使用动态库动态库(.dll):动态库又称动态链接库英文为DLL,是DynamicLinkLibrary的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。多个应用

    2022年9月25日
    4
  • 奋斗米莱经典台词[通俗易懂]

    奋斗米莱经典台词[通俗易懂]米莱,她专一,不做作,善良,敢爱敢恨。1.记住,在这个世界上,男人女人各有分工,男人主要用来对女人使坏,女人主要用来对男人好,以前我对这种混蛋分工特不满意。可是现在,我认命了。2.对夏琳:其

    2022年7月3日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号