簡體   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