Android 此类型具有构造函数,必须在此处初始化-Kotlin
我刚刚开始使用Android应用程序进行实验。我只想像这样继承类:Android 此类型具有构造函数,必须在此处初始化-Kotlin,android,constructor,kotlin,kotlin-android-extensions,Android,Constructor,Kotlin,Kotlin Android Extensions,我刚刚开始使用Android应用程序进行实验。我只想像这样继承类: class SomeApp : Application { } 但编译器提出了警告: 建议将其改为: class SomeApp : Application() { override fun onCreate() { super.onCreate() } } 我读到了。所以,如果超类有一个主构造函数,那么有必要在这里编写吗?像应用程序类一样,它有自己的构造函数 public Applica
class SomeApp : Application {
}
但编译器提出了警告:
建议将其改为:
class SomeApp : Application() {
override fun onCreate() {
super.onCreate()
}
}
我读到了。所以,如果超类有一个主构造函数,那么有必要在这里编写吗?像应用程序类一样,它有自己的构造函数
public Application() {
super(null);
}
那么,有必要为派生的对象使用主构造函数吗?或者我不能像Java那样做:
class SomeApp : Application {
constructor SomeApp(){
super();
}
}
或者这个错误暗示了别的什么?谁能给我详细解释一下吗?我对这门语言很陌生,我觉得这很奇怪
编辑:在java中,我可以执行以下操作:class SomeApp扩展应用程序{}
它有隐式构造函数,因此我不必编写:class SomeApp扩展应用程序{public Application(){super();}}}
,但在kotlin中,我必须定义空构造函数,如下所示:
class-SomeApp:Application(){}
?您不需要
class SomeApp : Application() {
constructor SomeApp(){
super();
}
}
因为这是等价的。如果类有一个主构造函数,则可以(而且必须)使用主构造函数的参数在那里初始化基类型
class SomeApp : Application() {
}
这在java中也相当于
class SomeApp extends Application {
public SomeApp(){
super();
}
}
这与主/辅助构造函数无关 在JVM(以及几乎任何其他地方)上,当您创建
SomeApp
在Java中,语法如您所说:
class SomeApp : Application {
constructor SomeApp(){
super();
}
}
这里您必须声明一个构造函数,然后您必须调用一个超类的构造函数
在Kotlin中,概念完全相同,但语法更好:
class SomeApp() : Application() {
...
}
在这里,您声明了一个不带参数的构造函数SomeApp()
,并说它调用Application()
,在这种情况下不带参数。这里的Application()
与java代码片段中的super()
具有完全相同的效果
在某些情况下,可以省略一些括号:
class SomeApp : Application()
错误文本显示:此类型具有构造函数,因此必须在此处初始化。这意味着类型Application
是一个类,而不是一个接口。接口没有构造函数,因此它们的语法不包括构造函数调用(括号):classa:CharSequence{…}
。但是Application
是一个类,所以可以调用构造函数(如果有多个构造函数,可以调用任何构造函数),或者“在这里初始化它”。嘿,我说的是Kotlin。你在说什么?我想你把他的“overridingonCreate
”和声明构造函数搞混了,我不知道他在问什么。auto complete添加到override onCreate
中的原因是,它发现他在构造函数中有一个错误,并决定过多地添加onCreate override。正确,onCreate是不相关的。你是什么意思?这就是我要做的it@KrupalShah我编辑了答案。这就是你要问的吗?据我所知,没有隐式的空构造函数。我说得对吗?@KrupalShah如果没有指定任何其他内容,则会有一个隐式空构造函数,但您必须明确地调用它。这很简单:与构造函数声明不同,构造函数调用是一个操作,可能会产生副作用。而且没有任何副作用是隐含的,这就是科特林背后的理念