Kotlin 中 Context、Fragment 和 Activity 的扩展函数如何优化代码?

How can I optimize code for extension function of Context, Fragment and Activity in Kotlin?

代码A是ContextFragmentActivity的扩展函数。

我认为它是多余的,我该如何优化它?

代码A

    fun Context.toast(msg: String){
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
    }
    
    fun Context.toast(@StringRes resId: Int){
        toast(getString(resId))
    }
    
    fun Context.toast(@StringRes resId: Int,msg: String){
        toast(getString(resId) + msg)
    }
    
    fun Context.toast(msg: String,@StringRes resId: Int){
        toast(msg + getString(resId))
    }
    
    //------------------------------------------------

    fun Fragment.toast(msg:String) {
        requireContext().toast(msg)
    }
    
    fun Fragment.toast(@StringRes resId: Int) {
        toast(requireContext().getString(resId))
    }
    
    fun Fragment.toast(@StringRes resId: Int, msg: String) {
        toast(requireContext().getString(resId) + msg)
    }
    
    fun Fragment.toast( msg: String, @StringRes resId: Int) {
        toast(msg+ requireContext().getString(resId))
    }
    
    //------------------------------------------------

    fun Activity.toast(msg: String){
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
    }
    
    fun Activity.toast(@StringRes resId: Int){
        toast(getString(resId))
    }
    
    fun Activity.toast(@StringRes resId: Int,msg: String){
        toast(getString(resId) + msg)
    }
    
    fun Activity.toast(msg: String,@StringRes resId: Int){
        toast(msg + getString(resId))
    }

上下文扩展函数应该足够了。您几乎可以在 UI 组件可用的任何地方使用它。

我们可以删除 Activity 的扩展名,因为 ActivityContext class.

的间接子 class

而且我们还可以删除 Fragment 扩展,因为它们只有在将片段附加到 activity(即上下文)后才有用。

fun Context.toast(msg: String){
    Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
}

fun Context.toast(@StringRes resId: Int){
    toast(getString(resId))
}

fun Context.toast(@StringRes resId: Int,msg: String){
    toast(getString(resId) + msg)
}

fun Context.toast(msg: String,@StringRes resId: Int){
    toast(msg + getString(resId))
}

这些函数可以在activity:

中使用

并且在片段中。我们必须首先获得对 Context:

的引用,这在逻辑上是正确的,也是有意为之的