Kotlin 静态扩展函数 Android

Ati*_*man 1 android kotlin

我想为 Android 内置ConnectivityManager类创建一个扩展函数,以便我的项目中的任何类都可以静态使用它。我只使用 Kotlin。

fun ConnectivityManager.checkInternet(context: Context): Boolean {
        val manager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val connection = manager.activeNetworkInfo
        if (connection != null && connection.isConnectedOrConnecting) {
            return true
        }
        return false
    }
Run Code Online (Sandbox Code Playgroud)

我可以通过创建 的对象来访问此函数,ConnectivityManager但我想做的是静态使用它。有什么可能吗?

s1m*_*nw1 5

仅当您的类定义了一个对象时,这才有可能companion

\n\n
class MyClass {\n    companion object { } \n}\n\nfun MyClass.Companion.foo() {\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

就像伴生对象的常规成员一样,可以仅使用类名作为限定符来调用它们:

\n\n
MyClass.foo()\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是,Java 类没有这样的companion对象,这就是为什么你不能\xe2\x80\x99 实现你想要的。

\n


小智 5

这种扩展功能很可能不是您正在寻找的。我可以看到两种处理方法。

创建顶级函数是单独的文件(例如network.kt)。

fun checkInternet(context: Context): Boolean{
    // perform check here
}
Run Code Online (Sandbox Code Playgroud)

或者在Context上创建扩展方法

fun Context.checkInternet(): Boolean {
    val manager = this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    // I've "kotlinized" a bit your `if` statement
    return manager.activeNetworkInfo?.isConnectedOrConnecting ?: false
}
Run Code Online (Sandbox Code Playgroud)

就我个人而言,我更喜欢使用扩展名的方法Context