3

我有示例第三方 Java 代码:

public class ApiClass extends PackagePrivateClass {
}

abstract class PackagePrivateClass {
    public static class StaticClass {
    }
}

所以只有ApiClassStaticClass是公开的。在 Java 中,我可以参考StaticClassApiClass.StaticClass. 对于 Kotlin 中的相同代码,我得到了Unresolved reference: StaticClass. 我也无法通过 获得参考PackagePrivateClass,因为它是私有包(很明显)。是否有任何黑客可以参考StaticClass(它是第三方代码,所以我不能简单地制作 PackagePrivateClass public)?

我知道这可能是“设计使然”,但它禁止我使用 3p 代码

4

1 回答 1

1

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

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()
    }
}
于 2020-03-02T16:20:58.587 回答