android - 这种类型有一个构造函数,必须在这里初始化 - Kotlin

标签 android constructor kotlin kotlin-android-extensions

我刚刚开始使用 Kotlin 试验 Android 应用程序.我只是想继承Application像这样的类:

class SomeApp : Application {

}

但是编译器会发出警告:

enter image description here

建议将其更改为:

class SomeApp : Application() {
    override fun onCreate() {
        super.onCreate()
    }
}

我读到了 primary and secondary constructors in the docs .那么如果父类(super class)有主构造函数,那么这里有必要写吗?像Application类有自己的构造函数

public Application() {
    super(null);
}

那么有必要为派生提供主构造函数吗?或者我不能做类似 Java 的事情吗:

class SomeApp : Application {
   constructor SomeApp(){
      super();
    }
}

或者这个错误暗示了别的什么?谁能详细解释我?我对这门语言很陌生,这对我来说很奇怪。

编辑:在 java 中我可以执行以下操作:class SomeApp extends Application{ }

它有隐式构造函数,所以我不用写:class SomeApp extends Application{ public Application(){ super(); } } 但是在 kotlin 中我必须定义如下的空构造函数: class SomeApp:Application(){ } ?

最佳答案

这与主要/次要构造函数无关。

在 JVM(以及几乎其他任何地方)上,当您创建 SomeApp

的实例时,会调用基类 Application 的构造函数

在 Java 中,语法就像你说的那样:

class SomeApp : Application {
    constructor SomeApp(){
      super();
    }
}

这里你必须声明一个构造函数,然后你必须调用父类(super class)的构造函数。

在 Kotlin 中,概念完全相同相同,但语法更好:

class SomeApp() : Application() {
    ...
}

这里你声明了一个没有参数的构造函数SomeApp(),并说它调用Application(),在这种情况下没有参数。这里的 Application() 与 java 代码 fragment 中的 super() 效果完全相同。

在某些情况下可能会省略一些括号:

class SomeApp : Application()

错误的文本说:这个类型有一个构造函数,因此必须在这里初始化。这意味着 Application 类型是一个类,而不是一个接口(interface)。接口(interface)没有构造函数,因此它们的语法不包括构造函数调用(括号):class A : CharSequence {...}。但是 Application 是一个类,所以你调用一个构造函数(任何一个,如果有的话),或者“在这里初始化它”。

关于android - 这种类型有一个构造函数,必须在这里初始化 - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248490/

相关文章:

c# - 通过基类创建派生类的实例,无需硬编码

不需要无参数构造函数和 Serializable 实现的 Java 序列化库

kotlin - Kotlin 中多态函数中的参数定位

kotlin - 如何将MutableList添加到其他MutableList-Kotlin?

android - Android 4.2 中的操作栏图标大小

android - java.lang.ClassNotFoundException : com. android.packageinstaller.InstallFlowAnalytics 问题

android - app:compileReleaseJavaWithJavac java.lang.VerifyError

android - 添加和调试外部项目

java - 为什么 javac 在不创建任何实例的类中创建 <init> 方法

android - 什么是 KTX(Kotlin 扩展库),为什么它在 Android 开发中越来越受欢迎