Kotlin中如何在多个类复用同一函数而无需重复复制代码?
解决方案
方案1:顶层扩展函数(最推荐)
你写的是Kotlin的Snackbar扩展函数,直接将函数抽到独立的公共Kotlin文件中即可全局复用,无需在A、B类中重复粘贴代码。
- 新建名为
SnackbarExt.kt的Kotlin文件,不需要在文件内定义类,直接在文件最外层编写扩展函数:
import androidx.annotation.ColorInt import com.google.android.material.snackbar.Snackbar fun Snackbar.withColor(@ColorInt colorInt:Int): Snackbar { this.view.setBackgroundColor(colorInt) return this }
- 原有A类、B类的调用代码无需任何修改,直接就能正常调用
withColor方法。
方案2:基类封装(仅适用于A、B类有共同父类的场景)
如果A、B类都是继承自同一个基类(比如共同继承BaseFragment),也可以把扩展函数放到基类中,仅在子类范围内复用:
open class BaseFragment: Fragment() { protected fun Snackbar.withColor(@ColorInt colorInt:Int): Snackbar { this.view.setBackgroundColor(colorInt) return this } }
让A、B类继承BaseFragment即可正常调用该方法。
可选优化
你还可以进一步封装通用的正确/错误样式Snackbar,减少更多重复代码:
import android.graphics.Color // 加在SnackbarExt.kt文件中 fun Snackbar.asCorrect(): Snackbar = withColor(Color.rgb(0, 128, 0)) fun Snackbar.asIncorrect(): Snackbar = withColor(Color.rgb(255, 0, 0))
封装后调用可以简化为:
Snackbar.make(requireView(), "Correct", Snackbar.LENGTH_LONG) .asCorrect() .show() Snackbar.make(requireView(), "InCorrect", Snackbar.LENGTH_LONG) .asIncorrect() .show()
内容的提问来源于stack exchange,提问作者klaus19
相关产品推荐
相关产品推荐

