首页 > 解决方案 > 从 java 扩展时,静态函数在 kotlin 中不可见

问题描述

我在一个 Android 项目中与 java 一起编写 Kotlin,我有一个抽象的 Java BaseApplication 类,它有一些静态方法,我的每种风格的 Application 类都扩展了这个 BaseApplication 类(称为 App.kt)并用 Kotlin 编写。我想知道为什么我不能通过 Kotlin 代码中的 App 类访问 BaseApplication 静态函数


public abstract class BaseApplication extends Application {
    public static void staticFunction(){
        Log.d("TAG", "some log...");
    }
}
public class App : BaseApplication() {
    fun doSomething(){
        Log.w("TAG", "doing something")
    }

我可以从 Java 类调用 App.staticFunction() 但我不能从 Kotlin 类调用它。难道我做错了什么?为什么我不能调用 App.staticFunction() ?有什么区别?

我可以从java做到这一点:

public class JavaTest {
    public void main(String[] args) {
        App.staticFunction();
    }
}

但是这个(kotlin)给了我编译错误:

class KotlinTest {
    fun main(args: Array<String>) {
        App.staticFunction()  //unresolved reference: static function
    }
}

(我知道我可以通过 AbstractApplication 访问 staticFunction,我只是想知道为什么我不能通过 App 类访问它?)

标签: javaandroidkotlin

解决方案


来自Java interop 的 Kotlin 文档

Java 类的静态成员构成这些类的“伴生对象”。我们不能将这样的“伴随对象”作为值传递,但可以显式访问成员......

您的App类是 Kotlin 类,对静态方法一无所知。但是,应该有一个为BaseApplicationJava 类上的静态方法创建的伴随对象。所以你应该能够调用静态方法

BaseApplication.staticFunction()

推荐阅读