如何在 Kotlin 中获取对 Java super class 的静态 class 的引用

How to get reference to static class of Java super class in Kotlin

我有示例第三方 Java 代码:

public class ApiClass extends PackagePrivateClass {
}

abstract class PackagePrivateClass {
    public static class StaticClass {
    }
}

所以只有 ApiClassStaticClass 是 public。在 Java 中,我可以通过 ApiClass.StaticClass 获得对 StaticClass 的引用。对于 Kotlin 中的相同代码,我得到了 Unresolved reference: StaticClass。我也无法通过 PackagePrivateClass 获得参考,因为它是私有包(显而易见的队长)。是否有任何 hack 可以引用 StaticClass(这是第三方代码,所以我不能简单地制作 PackagePrivateClass public)?

我知道它可能是 'by design',但是它禁止我使用 3p 代码

似乎唯一的解决方案是构建您的 kotlin class 可以访问的 Java 包装器 class。

public class ApiClass extends PackagePrivateClass {

}

abstract class PackagePrivateClass {

    public static class StaticClass {

        void instanceFunction() {

        }

        static void classFunction() {
        }
    }
}

适配器javaclass(StaticClassAdapter.java):

class StaticClassAdapter {

    private static ApiClass.StaticClass staticClass;

    void instanceFunction() {
        staticClass.instanceFunction();
    }

    static void classFunction() {
        PackagePrivateClass.StaticClass.classFunction();
    }
}

所以在你的 kotlin 代码中...

class KotlinClass {

    fun main() {
        StaticClassAdapter().instanceFunction()
        StaticClassAdapter.classFunction()
    }
}