通过派生类访问Java中定义的静态内部类
我已经用java定义了一些类,类似于下面的代码。 我试图通过一个派生的java类访问通过派生类访问Java中定义的静态内部类,java,kotlin,interop,Java,Kotlin,Interop,我已经用java定义了一些类,类似于下面的代码。 我试图通过一个派生的java类访问SomeValue,这在java中是允许的,但在kotlin中是不允许的 是否有通过派生类访问字段的方法 // java file // ------------------------------------------------- class MyBaseClass { public static final class MyInnerClass { public stat
SomeValue
,这在java中是允许的,但在kotlin中是不允许的
是否有通过派生类访问字段的方法
// 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
因此,您必须显式地使用基类限定嵌套类
在Kotlin中,这种行为被刻意地变得更加严格,以避免Java中与通过派生类型访问静态成员/类相关的一些混乱。您还可以看到,当您使用派生类名引用基类中的静态符号时,许多IDE会在Java中发出警告
关于术语,Kotlin对内部类(即用internal
关键字注释的类)有明确的定义。并非所有嵌套类都是内部类。另见
相关的: