Я знаю, что это тривиальный вопрос, но это меня совершенно интригует;поведение значений перечисления в операторах switch, объявленных как внутренние классы
Как внутренние классы (не статический) члены не могут быть доступны непосредственно без экземпляра него даже в космическом классе,
и время, чтобы получить доступ статических констант и есть к области с наружным класса hai.x; , но в случае использования «enums switch as case constants» это похоже на другой путь; взгляд dostuff2()
случай RED: работает, но случай value.RED дает ошибку коммутатор случае метка перечисления должна быть безоговорочным именем перечисления постоянная
я знаю выше заявление говорит это все, мне просто любопытно
если мы предположим, что компилятор колодки это значение. 'Для всех стрелочных константы .. почему это не тот случай с нормальным declartion в перечислении, а значение V = RED
public class enumvalues
{
public enum values
{
RED,GREEN,VALUE
}
public class hai
{
static final int x=90;
}
public static class statichai
{
}
public static void main(String []args)
{
}
public void dostuff2(values v)
{
// v =RED this is illegal
// System.out.println(RED); this will not compile because it cannot be accessed directly
// System.out.println(x); this will not compile because it cannot be accessed directly
switch(v)
{
case RED: //use of value.RED is strictly forbidden
System.out.println("red");
}
}
}
Вы попробовали 'value.RED' или' values.RED'? (уведомление 's' в' значениях 'в последнем) – Abubakkar
значения enum обычно должны быть квалифицированы. Только для коммутационных шкафов была сделана короткая нотация. _That's all._ –
Это просто правило языка программирования Java. Нет четкого ответа на вопрос «почему». Потому что дизайнеры языка Java думали, что это хорошая идея. Уже ясно, в каком типе перечисления вы включаете, поэтому наличие «values.RED» вместо «RED» в «case» было бы ненужной многословностью. – Jesper