有什么方法可以直接在 Kotlin 的构造函数中将 Context 转换为 Activity 吗?

Is there any way to cast a Context to an Activity directly inside the constructor with Kotlin?

有没有办法直接在构造函数中将 Context 转换为 Activity?

类似的东西:

class CustomView(mainActivity: MainActivity, attrs: AttributeSet?) : SurfaceView(mainActivity, attrs) {
    fun draw() {
        mainActivity.foo()
        ...
    }
}

为了避免在每个方法中强制转换它:

class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
    fun draw() {
        val mainActivity = context as MainActivity
        mainAcitivity.foo()
        ...
    }
}

你可以这样做:

class CustomView(private val activity: MainActivity) {
    constructor(context: Context) : this(context as MainActivity)
}

请注意,存储 activity 而不是上下文对象本身通常不是一个好主意,因为那样的话您会将 CustomView Class 与 activity 紧密耦合,这可以造成各种问题。

请考虑更改设计,使这些 类 不紧密耦合。

我想你可以这样做而不是这样做,这将是对每个方法的转换的改进

class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
    private val mainActivity = context as MainActivity
    fun draw() {
        mainActivity.foo()
    }
}

或者为了更安全地使用这样的安全转换

class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
    private val mainActivity = context as? MainActivity
    fun draw() {
        mainActivity?.foo()
    }
}