通过派生 class 访问在 Java 中定义的静态内部 class
Accessing static inner class defined in Java, through derived class
我在 java 中定义了一些 classes,类似于下面的代码。
我正在尝试通过派生的 java class 访问 SomeValue
,这在 java 中是允许的,但在 kotlin 中是不允许的。
有没有办法通过派生的class访问该字段?
// java file
// -------------------------------------------------
class MyBaseClass {
public static final class MyInnerClass
{
public static int SomeValue = 42;
}
}
final class MyDerivedClass extends MyBaseClass {
}
// kotlin file
// -------------------------------------------------
val baseAccess = MyBaseClass.MyInnerClass.SomeValue;
// this compiles
val derivedAccess = MyDerivedClass.MyInnerClass.SomeValue;
// ^ compile error: Unresolved reference: MyInnerClass
在 Kotlin 中,嵌套类型和伴随对象不会自动继承。
此行为并非特定于 Java,您可以单独在 Kotlin 中重现相同的行为:
open class Base {
class Nested
}
class Derived : Base()
val base = Base.Nested::class // OK
val derived = Derived.Nested::class // Error: 'Nested' unresolved
因此,您必须明确地使用基数 class 限定嵌套 class。
此行为在 Kotlin 中有意变得更加严格,以避免 Java 中与通过派生类型访问静态 members/classes 相关的一些混淆。您还会看到,当您使用派生的 class 名称来引用基 class.
中的静态符号时,许多 IDE 会在 Java 中警告您
关于术语,Kotlin有明确的定义inner classes(即用inner
关键字注解的)。并非所有嵌套 classes 都是内部 classes。另见 here.
相关:
我在 java 中定义了一些 classes,类似于下面的代码。
我正在尝试通过派生的 java class 访问 SomeValue
,这在 java 中是允许的,但在 kotlin 中是不允许的。
有没有办法通过派生的class访问该字段?
// java file
// -------------------------------------------------
class MyBaseClass {
public static final class MyInnerClass
{
public static int SomeValue = 42;
}
}
final class MyDerivedClass extends MyBaseClass {
}
// kotlin file
// -------------------------------------------------
val baseAccess = MyBaseClass.MyInnerClass.SomeValue;
// this compiles
val derivedAccess = MyDerivedClass.MyInnerClass.SomeValue;
// ^ compile error: Unresolved reference: MyInnerClass
在 Kotlin 中,嵌套类型和伴随对象不会自动继承。
此行为并非特定于 Java,您可以单独在 Kotlin 中重现相同的行为:
open class Base {
class Nested
}
class Derived : Base()
val base = Base.Nested::class // OK
val derived = Derived.Nested::class // Error: 'Nested' unresolved
因此,您必须明确地使用基数 class 限定嵌套 class。
此行为在 Kotlin 中有意变得更加严格,以避免 Java 中与通过派生类型访问静态 members/classes 相关的一些混淆。您还会看到,当您使用派生的 class 名称来引用基 class.
中的静态符号时,许多 IDE 会在 Java 中警告您关于术语,Kotlin有明确的定义inner classes(即用inner
关键字注解的)。并非所有嵌套 classes 都是内部 classes。另见 here.
相关: