Как получить ссылку на класс c класса Java суперкласса в Kotlin - PullRequest
3 голосов
/ 02 марта 2020

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

public class ApiClass extends PackagePrivateClass {
}

abstract class PackagePrivateClass {
    public static class StaticClass {
    }
}

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

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

1 Ответ

1 голос
/ 02 марта 2020

Кажется, единственным решением является создание Java класса-оболочки, к которому может получить доступ ваш класс kotlin.

public class ApiClass extends PackagePrivateClass {

}

abstract class PackagePrivateClass {

    public static class StaticClass {

        void instanceFunction() {

        }

        static void classFunction() {
        }
    }
}

Адаптер java class (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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...