Calling non-final function in constructor 警告

在 Kotlin 中,如果你在构造函数中调用一个非 final 函数,编译器会发出一个警告。这是因为在构造函数中调用非 final 函数可能会导致意外的行为,因为子类可以覆盖这个函数,并且在构造函数中调用这个函数可能会调用到子类中的实现。

要消除这个警告,有几种方法可以考虑:

  1. 将被调用的函数声明为 final。这样一来,子类将无法覆盖该函数,从而确保在构造函数中调用时始终使用父类的实现。
open class MyClass {
    final fun myFunction() {
        // 函数实现
    }

    constructor() {
        myFunction()
    }
}
  1. 在构造函数中使用 init 块来调用函数。init 块是在主构造函数执行之前执行的代码块,因此可以安全地在其中调用非 final 函数。
class MyClass {
    init {
        myFunction()
    }

    fun myFunction() {
        // 函数实现
    }
}
  1. 将构造函数标记为 @Suppress("LeakingThis")。这个注解告诉编译器忽略在构造函数中调用非 final 函数的警告。
class MyClass {
    constructor() {
        myFunction()
    }

    fun myFunction() {
        // 函数实现
    }
}

请注意,这种方法并不会消除实际的问题,而只是告诉编译器你知道自己在做什么。因此,在使用这种方法时,你需要确保在构造函数中调用非 final 函数是安全的,并且不会引起意外的行为。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容