Чи є в Java типи enum всередині класу статичними?


123

Я, здається, не можу отримати доступ до членів екземпляра навколишнього класу всередині enum, як я міг би всередині внутрішнього класу. Це означає, що перерахунки статичні? Чи є доступ до області екземпляра навколишнього класу, чи мені потрібно передати екземпляр методу enum, де мені це потрібно?

public class Universe {
    public final int theAnswer;

    public enum Planet {
        // ...
        EARTH(...);
        // ...

        // ... constructor etc.

        public int deepThought() {
            // -> "No enclosing instance of type 'Universe' is accessible in this scope"
            return Universe.this.theAnswer;
        }
    }

    public Universe(int locallyUniversalAnswer) {
        this.theAnswer = locallyUniversalAnswer;
    }
}

Я не впевнений, що повністю розумію те, що ви намагаєтесь описати. Ви можете дати невеликий зразок коду, можливо?
Піт

Відповіді:



45

Не було б сенсу робити (нестатичний) внутрішній клас перерахунку на рівні екземпляра - якщо екземпляри Enum самі були прив'язані до зовнішнього класу, вони порушили б гарантію перерахунку -

наприклад, якщо б у вас був

public class Foo {
   private enum Bar {
        A, B, C;
   } 
}

Щоб значення enum правильно діяли як константи (psuedocode, ігноруючи обмеження доступу)

Bar b1 = new Foo().A
Bar b2 = new Foo().A

b1 і b2 повинні були бути однаковими об'єктами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.