如何在 Kotlin 中获取对 Java super class 的静态 class 的引用
How to get reference to static class of Java super class in Kotlin
我有示例第三方 Java 代码:
public class ApiClass extends PackagePrivateClass {
}
abstract class PackagePrivateClass {
public static class StaticClass {
}
}
所以只有 ApiClass
和 StaticClass
是 public。在 Java 中,我可以通过 ApiClass.StaticClass
获得对 StaticClass
的引用。对于 Kotlin 中的相同代码,我得到了 Unresolved reference: StaticClass
。我也无法通过 PackagePrivateClass
获得参考,因为它是私有包(显而易见的队长)。是否有任何 hack 可以引用 StaticClass
(这是第三方代码,所以我不能简单地制作 PackagePrivateClass public
)?
我知道它可能是 'by design',但是它禁止我使用 3p 代码
似乎唯一的解决方案是构建您的 kotlin class 可以访问的 Java 包装器 class。
public class ApiClass extends PackagePrivateClass {
}
abstract class PackagePrivateClass {
public static class StaticClass {
void instanceFunction() {
}
static void classFunction() {
}
}
}
适配器javaclass(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()
}
}
我有示例第三方 Java 代码:
public class ApiClass extends PackagePrivateClass {
}
abstract class PackagePrivateClass {
public static class StaticClass {
}
}
所以只有 ApiClass
和 StaticClass
是 public。在 Java 中,我可以通过 ApiClass.StaticClass
获得对 StaticClass
的引用。对于 Kotlin 中的相同代码,我得到了 Unresolved reference: StaticClass
。我也无法通过 PackagePrivateClass
获得参考,因为它是私有包(显而易见的队长)。是否有任何 hack 可以引用 StaticClass
(这是第三方代码,所以我不能简单地制作 PackagePrivateClass public
)?
我知道它可能是 'by design',但是它禁止我使用 3p 代码
似乎唯一的解决方案是构建您的 kotlin class 可以访问的 Java 包装器 class。
public class ApiClass extends PackagePrivateClass {
}
abstract class PackagePrivateClass {
public static class StaticClass {
void instanceFunction() {
}
static void classFunction() {
}
}
}
适配器javaclass(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()
}
}