-1

我正在学习自定义 ArrayAdapter。在 Github 上找到了这个项目。我不明白为什么在这里使用 super 。

public AndroidFlavorAdapter(Activity context, ArrayList<AndroidFlavor>Flavors) {

        super(context, 0, Flavors);
  }

当我删除 super 时,会弹出此错误。

X '()' 没有适用的构造函数</p>

有什么帮助吗?

4

2 回答 2

3

每个构造函数都需要另一个构造函数作为它做的第一件事1。有三种方法可以做到这一点:

  • 构造函数可以进行显式super调用,可以带参数也可以不带参数。参数类型需要匹配在超类中声明的构造函数的签名。

  • 构造函数可以进行显式this调用。这将调用该类声明的另一个构造函数。

  • 如果没有显式superthis类,Java 编译器将隐式super()调用添加到构造函数。为此,超类中需要有一个不带参数的构造函数;即无参数构造函数。

java.lang.Object1 -没有超类的除外。请注意,字节码验证器会检查这一点。如果您使用(比如说)字节码汇编器来创建一个具有不调用超类构造函数的构造函数的类,它将被类加载器拒绝。


所以 ...

为什么super(...)在构造函数中使用?

显式调用超类构造函数。请注意,在这种情况下,您将参数传递给超类构造函数。

当我删除 super 时,会弹出此错误:“没有适用于 '()' 的构造函数”

这是因为如果您没有显式调用,编译器无法找到隐式调用的超类无参数构造函数super(...)

你能告诉我为什么 super 中的第二个参数是 0。

超类的 javadocs 应该解释这意味着什么。在这种情况下,第二个参数是资源 ID。我不确定这是否有意义,但我看到它说 Resource ID 0 表示null.

于 2020-07-28T03:07:35.277 回答
0

因为基类可能正在为实例进行所需的初始化。

于 2020-07-28T02:51:09.957 回答