繁体   English   中英

如何在 Java/Kotlin 中覆盖另一个 class 实例的方法?

[英]How to override a method of another class instance in Java/Kotlin?

我有一个 class ,其中有一个 Fragment 实例,并且想要覆盖片段方法。 我怎样才能在这里进行这种覆盖?

class MyClass(val fragment: Fragment) {
    init {
        fragment.onActivityCreated = onActivityCreated //what should be written?
    }

    fun onActivityCreated(savedInstanceState: Bundle?) {
        actions()
        super.onActivityCreated(savedInstanceState)
    }
}

感谢删除的答案,完成的机制如下所示:

class MyClass<T>(private val viewModelPayments: PaymentsViewModel, val fragment: T) where T : Fragment, T : Featured {

    init {
        fragment.doOnActivityCreated(::onActivityCreated)
        fragment.doOnActivityResult(::onActivityResult)
    }

    private fun onActivityCreated(savedInstanceState: Bundle?) {
        //...
    }

    private fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
        //...
    }
}

interface Featured {
    fun doOnActivityCreated(action: (savedInstanceState: Bundle?) -> Unit)
    fun doOnActivityResult(action: (requestCode: Int, resultCode: Int, data: Intent?) -> Unit)
}

abstract class FeatureFragment : BaseFragment(), Featured {
    private var onActivityCreatedAction: ((savedInstanceState: Bundle?) -> Unit)? = null
    private var onActivityResultAction: ((requestCode: Int, resultCode: Int, data: Intent?) -> Unit)? = null

    override fun doOnActivityCreated(action: (savedInstanceState: Bundle?) -> Unit) {
        onActivityCreatedAction = action
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        onActivityCreatedAction?.invoke(savedInstanceState)
    }

    override fun doOnActivityResult(action: (requestCode: Int, resultCode: Int, data: Intent?) -> Unit) {
        onActivityResultAction = action
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        onActivityResultAction?.invoke(requestCode, resultCode, data)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM