Dokumentacja Kotlin Stany:

Uszczelniona klasa może mieć podklasy, ale wszystkie z nich muszą być zadeklarowane w tym samym pliku, co sama klasa zapieczętowana. (Przed Kotlin 1.1 zasady były jeszcze bardziej surowe: Klasy musiały zostać zagnieżdżone w deklaracji zamkniętej klasy).

Wprawdzie, jest to sformułowane jako niezbędne, ale nie wystarczające warunki, ale robi to sugerować (przez brak czegoś sprzecznego), że mogę zadeklarować podklasę zamkniętej klasy w dowolnym miejscu w tym samym pliku.

Biorąc pod uwagę, że następujący kod kompiluje:

//class Jungle {
    sealed class Animal
    class Tiger : Animal()
//}

Dlaczego następuje:

class Jungle {
    sealed class Animal
    class Tiger : Animal()
}

Drugi fragment daje następujące błędy z wersją Plugin Intellij Kotlin 1.3.72-release-IJ2020.1-5:

Error:(3, 20) Kotlin: Cannot access '<init>': it is private in 'Animal'
Error:(3, 20) Kotlin: This type is sealed, so it can be inherited by only its own nested classes or objects

W rzeczywistości drugi komunikat o błędzie tutaj wydaje się bezpośrednio zaprzeczyć dokumentację.

1
tonicsoft 2 sierpień 2020, 04:20

1 odpowiedź

Najlepsza odpowiedź

Jest to Otwórz problem, który również odnotowuje wprowadzający błąd diagnostyczny. Ale wydaje się, że rozmowa wokół niego umarła.

Również to Zaplątana klasa spadkowa propozycja Od 4 lat temu pozostawia kwestię sub-klasycznej klasy zagnieżdżonej klasę przez klasę na tym samym poziomie jako otwarte pytanie

1
k.wahome 2 sierpień 2020, 06:42