Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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_Kotlin_Android Custom View - Fatal编程技术网

Android 在kotlin中从构造函数调用抽象方法安全吗?

Android 在kotlin中从构造函数调用抽象方法安全吗?,android,kotlin,android-custom-view,Android,Kotlin,Android Custom View,我正在做一个android项目。我想用一个抽象方法创建FrameLayout的抽象子类 @LayoutRes abstract fun getLayoutToInflate(): Int 在构造器中,我想放大这个方法返回的布局。但是IDE在这段代码中显示了关于“调用构造函数中的非final函数…”的警告 val inflater = LayoutInflater.from(context) inflatedBanner = inflater.inflate(getLayoutToInf

我正在做一个android项目。我想用一个抽象方法创建FrameLayout的抽象子类

@LayoutRes    
abstract fun getLayoutToInflate(): Int
在构造器中,我想放大这个方法返回的布局。但是IDE在这段代码中显示了关于“调用构造函数中的非final函数…”的警告

val inflater = LayoutInflater.from(context)
inflatedBanner = inflater.inflate(getLayoutToInflate(), this, true)
此应用程序尚未生成。所以写了一个简单的kotlin代码来测试

abstract class Base {
    val text: String
    constructor(text: String) {
        this.text = text
        println(text + getTextSuffix())
    }
    abstract fun getTextSuffix(): String
}

class Derived(text: String) : Base(text) {
    override fun getTextSuffix() = "_"
}

fun main(args: Array<String>) {
    val d = Derived("stuff")
}
抽象类基类{
val文本:字符串
构造函数(文本:字符串){
this.text=文本
println(text+getTextSuffix())
}
抽象函数getTextSuffix():字符串
}
派生类(文本:字符串):基(文本){
覆盖函数getTextSuffix()=“\ux”
}
趣味主线(args:Array){
val d=派生(“填充物”)
}
这段代码总是打印“stuff_”,这意味着重写的抽象方法在构造函数中可用。
在我的应用程序中,我也可以依赖这种行为吗?如果没有,那么在kotlin中实现类似内容的正确方法是什么?

kotlin与Java或大多数其他OOP语言没有什么不同

只要您在方法的契约中明确指出
方法不能访问子类中的任何状态,您可以从基类的构造函数安全地调用它们。如果类违反此规则,则其方法将访问未初始化状态。

只要重写方法不访问子类中的任何状态,就可以了。如果他们这样做,他们将访问未初始化状态。@ MARKOTPONNIK这个评论可能也足够好,回答:“Kotlin这里与java或任何其他OOP语言没有什么不同。”它与C++不同。“来自任何JVM和CLR语言”会更正确。是的,我意识到当我写它的时候。。。但是C++可能是唯一重要的例外,我发现它是一个太详细的讨论。我改为“大多数其他OOP语言”。