Android View及其子类构造函数设计的巧妙之处在哪里?
View在5.0以上,有四个构造函数(分别带1 2 3 4个参数)
1、第二个内部调用第三个,第三个又调用第四个,最后第四个内部又调用第一个,形成了一个链
2、而View的子类四个函数调用关系:第一个调用第二个,第二个调用第三个,第三个调用第四个,而第四个则调用父类的第四个构造函数super(context, attrs, defStyleAttr, defStyleRes);
3、例如ViewGroup: 第一个调用第二个,第二个调用第三个,第三个调用第四个,而第四个则调用View的第四个,View的第四个内部则调用了View的第一个
View:
public View(Context context) {
....
}
public View(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
this(context);
....
}
而ViewGroup:
publicViewGroup(Context context) {
this(context, null);
}
publicViewGroup(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
publicViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
publicViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
initViewGroup();
initFromAttributes(context, attrs, defStyleAttr, defStyleRes);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
说白点,这是Android逐渐新增功能对低版本兼容的方式。
比如四个参数的构造方法的最后那个参数,是最近才加入的,为了保证低版本兼容,原来三个参数的构造方法还需要保留,这时候就直接让三参数的构造方法带上一个第四参数的默认值调用第四参数,就可以避免写很多重复的代码了。