gpt4 book ai didi

java - 通过派生类访问Java中定义的静态内部类

转载 作者:行者123 更新时间:2023-12-01 23:23:31 25 4
gpt4 key购买 nike

我在java中定义了一些类,类似于下面的代码。我正在尝试通过派生的 java 类访问 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 对内部类(即用 inner 关键字注释的类)有明确的定义。并非所有嵌套类都是内部类。另请参阅here .

相关:

关于java - 通过派生类访问Java中定义的静态内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com