如何在Kotlin中获取Java超类的静态类引用

3

我有一些第三方Java代码样例:

public class ApiClass extends PackagePrivateClass {
}

abstract class PackagePrivateClass {
    public static class StaticClass {
    }
}

因此,只有ApiClassStaticClass是公共的。在Java中,我可以使用ApiClass.StaticClass获取对StaticClass的引用。在Kotlin中,对于相同的代码,我得到了Unresolved reference: StaticClass。我也无法通过PackagePrivateClass获取引用,因为它是包私有的(显然)。是否有任何方法可以获取对StaticClass的引用(它是第三方代码,因此我不能简单地使PackagePrivateClass变为public)?

我理解这可能是“按设计”,但它禁止我使用第三方代码。


你尝试过使用 Kotlin 反射吗?https://kotlinlang.org/docs/tutorials/kotlin-for-py/member-references-and-reflection.html - DemoDemo
1个回答

1
似乎唯一的解决方案是构建Java包装类,以使您的kotlin类可以访问它。
public class ApiClass extends PackagePrivateClass {

}

abstract class PackagePrivateClass {

    public static class StaticClass {

        void instanceFunction() {

        }

        static void classFunction() {
        }
    }
}

适配器Java类(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()
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接