Android 在kotlin中从构造函数调用抽象方法安全吗?
我正在做一个android项目。我想用一个抽象方法创建FrameLayout的抽象子类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
@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语言”。