Kotlin 中 Context、Fragment 和 Activity 的扩展函数如何优化代码?
How can I optimize code for extension function of Context, Fragment and Activity in Kotlin?
代码A是Context
、Fragment
和Activity
的扩展函数。
我认为它是多余的,我该如何优化它?
代码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
的扩展名,因为 Activity
是 Context
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
:
的引用,这在逻辑上是正确的,也是有意为之的
代码A是Context
、Fragment
和Activity
的扩展函数。
我认为它是多余的,我该如何优化它?
代码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
的扩展名,因为 Activity
是 Context
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
: