Android View及其子类构造函数设计的巧妙之处在哪里?

发布于 2022-09-01 20:48:20 字数 1299 浏览 19 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千鲤 2022-09-08 20:48:20

说白点,这是Android逐渐新增功能对低版本兼容的方式。
比如四个参数的构造方法的最后那个参数,是最近才加入的,为了保证低版本兼容,原来三个参数的构造方法还需要保留,这时候就直接让三参数的构造方法带上一个第四参数的默认值调用第四参数,就可以避免写很多重复的代码了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文