最近看了一篇文章#Effective Android# 不要重载组件的构造函数(No.1)(应该叫重写),引发思考,一直没发现这个问题,在此记下,希望和各位共同学习。废话不多说,上代码:
在继承于Activity的类MyActivity中给出带参数的构造方法
public MyActivity(Context context){
...
}
实例化:
MyActivity activity = new MyActivity(context);
运行通过!!!
但是
如果在其他界面通过如下方式跳转MyActivity时:
Intent intent = new Intent(MainActivity.this,MyActivity.class);
startActivity(intent);
会抛出如下异常:
Caused by: java.lang.InstantiationException: class com.XXX.MyActivity has no zero argument constructor
猜想:
通过Intent方式去打开一个Activity,android可能需要一个默认的无参构造方法去实例化跳转的Activity对象,此时我们已经给出了MyActivity带参的构造方法,相当于此时MyActivity无参的构造方法已经无效,所以会报没有无参构造器的异常!!!
解决:
在MyActivity中添加一个无参的构造方法!顺利通过运行
文章探讨了在Android开发中重写Activity等组件构造函数可能导致的问题。虽然可以成功实例化带参数的构造方法,但当尝试通过Intent启动此类组件时,会抛出`InstantiationException`,因为系统需要无参构造函数来创建组件实例。提醒开发者遵循最佳实践,避免重写组件的构造函数。
489

被折叠的 条评论
为什么被折叠?



