Как получить ссылку на статический класс суперкласса 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()
}
}