Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
14 Окт 2024
2 мин
288

Использование оператора switch с enum в подклассе в Java

Одной из распространенных проблем, с которой сталкиваются новички в Java, является использование оператора switch с enum, который объявлен в подклассе. Рассмотрим

Одной из распространенных проблем, с которой сталкиваются новички в Java, является использование оператора switch с enum, который объявлен в подклассе. Рассмотрим типичный пример:

public class SomeClass {
    public static class AnotherClass {
        public enum MyEnum {
            VALUE_A, VALUE_B
        }
        public MyEnum myEnum;
    }

    public void someMethod() {
        AnotherClass.MyEnum enumExample; //...

        switch (enumExample) {
            case AnotherClass.MyEnum.VALUE_A: { // Ошибка на этой строке
                //..
                break;
            }
        }
    }
}

В этом примере происходит следующая ошибка: «Квалифицированный case-метка SomeClass.AnotherClass.MyEnum.VALUE_A должна быть заменена на неквалифицированный enum-константу VALUE_A«. Это означает, что в операторе switch с enum необходимо использовать только имя enum-константы, а не полное имя с именем класса.

Однако, если enum объявлен в подклассе, просто использовать имя константы не получится, ведь оно не будет видно в области видимости. Это происходит из-за того, что в Java enum-константы автоматически становятся статическими членами своего enum-класса и не могут быть вызваны без имени класса.

Чтобы решить эту проблему, можно просто импортировать enum в область видимости метода, и затем использовать константы enum напрямую. Вот пример решения этой проблемы:

import SomeClass.AnotherClass.MyEnum; // Импорт enum

public class SomeClass {
    public static class AnotherClass {
        public enum MyEnum {
            VALUE_A, VALUE_B
        }
        public MyEnum myEnum;
    }

    public void someMethod() {
        MyEnum enumExample; //...

        switch (enumExample) {
            case VALUE_A: { // Теперь это работает
                //..
                break;
            }
        }
    }
}

Так, проблема использования оператора switch с enum в подклассе любого класса в Java может быть успешно решена путем импорта этого enum в область видимости метода.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий