Как получить ссылку на статический класс суперкласса Java в Kotlin

У меня есть образец стороннего кода Java:

public class ApiClass extends PackagePrivateClass {
}

abstract class PackagePrivateClass {
    public static class StaticClass {
    }
}

Так только ApiClass а также StaticClassявляются общедоступными. В Java я могу получить ссылку наStaticClass с: ApiClass.StaticClass. Для того же кода в Котлине я получилUnresolved reference: StaticClass. Я также не могу получить ссылку черезPackagePrivateClass, потому что это частный пакет (капитан очевиден). Есть ли какой-нибудь взлом, чтобы получить ссылку наStaticClass (это сторонний код, поэтому я не могу просто сделать PackagePrivateClass public)?

Я понимаю, что это, вероятно, "намеренно", но запрещает мне использовать код 3p.

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();
    }
}

Итак, в вашем коде котлина...

class KotlinClass {

    fun main() {
        StaticClassAdapter().instanceFunction()
        StaticClassAdapter.classFunction()
    }
}
Другие вопросы по тегам