gpt4 book ai didi

android - Android Eclipse 插件生成的代码中 super() 调用的位置是否可靠?

转载 作者:IT老高 更新时间:2023-10-28 23:33:28 29 4
gpt4 key购买 nike

在许多 Android 方法中,尤其是构造函数和重写方法,您应该甚至必须使用 super() 调用父类方法。当您使用 Eclipse Source > Override/Implement Methods... 时,您会从带有 TODO 标记的模板中获取代码,如下所示:

public MyCanvas(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}


@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
}

我不完全理解父类(super class)在每种情况下的作用,所以我总是将我的代码插入到 //TODO 标记的确切位置。在示例中,我将在构造函数中的代码之前和 onDraw() 中的代码之后调用 super()。

我可以始终依赖生成代码中的这些代码插入位置吗?何时调用 super() 是否有简单的规则/解释?

最佳答案

这是个好问题。不幸的是,这没有简单的规则。你需要知道父类(super class)的实现是做什么的。有时(如在 View.onDraw() 中),父类(super class)实现什么也不做;调用 super() 既无害又不必要。在其他情况下(例如 Activity.onCreate()),父类(super class)实现执行必须在子类处理中的某个点执行的关键操作。有时调用 super() 时发生的事情应该在子类中的任何处理之前发生,有时在其他点。有时您想用您自己的处理完全替换父类(super class)处理,在这种情况下您根本不调用 super()。您可以完全自由地在子类逻辑中的任何点(甚至在多个点)调用父类(super class)版本。

在构造函数中,对父类(super class)构造函数(如果存在)的调用必须是方法中的第一件事。如果没有,编译器会自动在父类(super class)中插入对无参数构造函数的调用。 (如果父类(super class)没有无参数构造函数,或者子类无法访问它,编译器会产生错误。)

如果文档没有提供足够的信息,那么您必须查看源代码。 Android 代码可用 here ( Gingerbread 发行版)。 API 代码在 core 下。

编辑 git.kernel.org 上不再提供该代码。这里还有另外两个地方可以浏览代码:

主要代码在仓库Platform > Frameworks > Base

关于android - Android Eclipse 插件生成的代码中 super() 调用的位置是否可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994959/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com