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