You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何在多个类复用同一函数而无需重复复制代码?

解决方案

方案1:顶层扩展函数(最推荐)

你写的是Kotlin的Snackbar扩展函数,直接将函数抽到独立的公共Kotlin文件中即可全局复用,无需在A、B类中重复粘贴代码。

  1. 新建名为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 
}
  1. 原有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:06:03