我正在学习自定义 ArrayAdapter。在 Github 上找到了这个项目。我不明白为什么在这里使用 super 。
public AndroidFlavorAdapter(Activity context, ArrayList<AndroidFlavor>Flavors) {
super(context, 0, Flavors);
}
当我删除 super 时,会弹出此错误。
X '()' 没有适用的构造函数</p>
有什么帮助吗?
我正在学习自定义 ArrayAdapter。在 Github 上找到了这个项目。我不明白为什么在这里使用 super 。
public AndroidFlavorAdapter(Activity context, ArrayList<AndroidFlavor>Flavors) {
super(context, 0, Flavors);
}
当我删除 super 时,会弹出此错误。
X '()' 没有适用的构造函数</p>
有什么帮助吗?
每个构造函数都需要另一个构造函数作为它做的第一件事1。有三种方法可以做到这一点:
构造函数可以进行显式super
调用,可以带参数也可以不带参数。参数类型需要匹配在超类中声明的构造函数的签名。
构造函数可以进行显式this
调用。这将调用该类声明的另一个构造函数。
如果没有显式super
或this
类,Java 编译器将隐式super()
调用添加到构造函数。为此,超类中需要有一个不带参数的构造函数;即无参数构造函数。
java.lang.Object
1 -没有超类的除外。请注意,字节码验证器会检查这一点。如果您使用(比如说)字节码汇编器来创建一个具有不调用超类构造函数的构造函数的类,它将被类加载器拒绝。
所以 ...
为什么
super(...)
在构造函数中使用?
显式调用超类构造函数。请注意,在这种情况下,您将参数传递给超类构造函数。
当我删除 super 时,会弹出此错误:“没有适用于 '()' 的构造函数”
这是因为如果您没有显式调用,编译器无法找到隐式调用的超类无参数构造函数super(...)
。
你能告诉我为什么 super 中的第二个参数是 0。
超类的 javadocs 应该解释这意味着什么。在这种情况下,第二个参数是资源 ID。我不确定这是否有意义,但我看到它说 Resource ID 0 表示null
.
因为基类可能正在为实例进行所需的初始化。