Acceso a clase interna estática se define en Java, a través de clase derivada

keccs:

Tengo algunas clases definidas en java, similar al código de abajo. Estoy intentando acceder SomeValuea través de una clase java derivados, que se deja en java, pero no en Kotlin.

¿Hay una manera de acceder al campo a través de la clase derivada?

// 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

El operador :

En Kotlin, tipos anidados y objetos de compañía no se heredan de forma automática.

Este comportamiento no es específico de Java, puede reproducir el mismo comportamiento en Kotlin solo:

open class Base {
    class Nested
}

class Derived : Base()

val base = Base.Nested::class        // OK
val derived = Derived.Nested::class  // Error: 'Nested' unresolved

Como tal, tiene forma explícita para calificar la clase anidada utilizando la clase base.

Este comportamiento fue hecho deliberadamente más estricta en Kotlin, para evitar algunas de las confusiones en Java relacionados con el acceso a miembros estáticos / clases a través de los tipos derivados. También se ve que una gran cantidad de entornos de desarrollo que le avise en Java cuando se utiliza un nombre de clase derivada para referirse a símbolos estáticos en la clase base.

En cuanto a la terminología, Kotlin tiene una definición clara de las clases internas (es decir, aquellos anotado con la innerpalabra clave). No todas las clases anidadas son las clases internas. Ver también aquí .

Relacionado:

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=174768&siteId=1
Recomendado
Clasificación