Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 此类型具有构造函数,必须在此处初始化-Kotlin_Android_Constructor_Kotlin_Kotlin Android Extensions - Fatal编程技术网

Android 此类型具有构造函数,必须在此处初始化-Kotlin

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

我刚刚开始使用Android应用程序进行实验。我只想像这样继承类:

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。你在说什么?我想你把他的“overriding
onCreate
”和声明构造函数搞混了,我不知道他在问什么。auto complete添加到
override onCreate
中的原因是,它发现他在构造函数中有一个错误,并决定过多地添加onCreate override。正确,onCreate是不相关的。你是什么意思?这就是我要做的it@KrupalShah我编辑了答案。这就是你要问的吗?据我所知,没有隐式的空构造函数。我说得对吗?@KrupalShah如果没有指定任何其他内容,则会有一个隐式空构造函数,但您必须明确地调用它。这很简单:与构造函数声明不同,构造函数调用是一个操作,可能会产生副作用。而且没有任何副作用是隐含的,这就是科特林背后的理念