Значения перечисления в switch-case блоке

157
13 марта 2018, 02:26

У меня есть простое перечисление:

package reports.generation;
public enum ReportType {
    CARD_EMISSION_SIMPLE,
    CARD_EMISSION_WITH_STATUS
}

Которое я хочу использовать в классе другого пакета. Однако если я пытаюсь ссылаться на значение перечисления в виде ReportType.CARD_EMISSION_SIMPLE:

package reports.ui.service;
...
import reports.generation.ReportType;
public class BgrdService extends Service<String> {
   class BgrdTask extends Task<String> {
        @Override 
        protected String call() throws Exception {
             try {
                 switch (reportType) {
                    case ReportType.CARD_EMISSION_SIMPLE:
                        System.out.println("CARD_EMISSION_SIMPLE");
                        break;
                    case ReportType.CARD_EMISSION_WITH_STATUS :
                        System.out.println("CARD_EMISSION_WITH_STATUS");
                        break;
                 }          
                 ...
             } catch (Exception ex) {
                 ...
             }    
        }
    }
}

Eclipse подчёркивает это значение красным и при наведении мыши выдаёт следующее предупреждение:

и при нажатии на ссылку "Replace with the unqualified enum constant 'CARD_EMISSION_SIMPLE'" заменяет значение ReportType.CARD_EMISSION_SIMPLE на CARD_EMISSION_SIMPLE:

Но при этом в импортах ничего не меняется, по-прежнему остаётся только

import reports.generation.ReportType;

Хотя в других местах, не в операторе case можно ссылаться на CARD_EMISSION_SIMPLE без ReportType. только с помощью статического импорта:

import static reports.generation.ReportType.CARD_EMISSION_SIMPLE;
...
         switch (reportType) {
                    case CARD_EMISSION_SIMPLE: 
                        System.out.println(CARD_EMISSION_SIMPLE);
                        break;
...

Почему в операторе case блока switch-case можно ссылаться на CARD_EMISSION_SIMPLE без ReportType. без статического импорта?

READ ALSO
Сравнение строк из базы данных с переменной (SQLite)

Сравнение строк из базы данных с переменной (SQLite)

Подскажите пожалуйста, пишу приложение на андроид и есть необходимость вытащить строку с определённым строковым значением которое задано...

184
Как сохранить массив в базу данных SQLite?

Как сохранить массив в базу данных SQLite?

Подскажите пожалуйста, как реализовать хранение массива в базе данных? Долго гуглил, но толком ничего не понялЕсли можно, то объясните подробно

185
Нужна ли реализация интерфейса Money?

Нужна ли реализация интерфейса Money?

Есть следующие интерфейсы, необходимо написать метод Money calculateTotalPrice(Collection shipments), возвращающий сумму стоимости всех товаров (price*amount) с использованием...

126
submit и invoke в ForkJoinPool

submit и invoke в ForkJoinPool

Подскажите наиболее просто и с примерами если можно разницу между submit и invoke в ForkJoinPool и когда их лучше всего использоватьШот гугл не помогает...

128