public class TestEnum2
{
static public enum Day { Monday, Tuesday, Wednesday, Thursday, Friday, 
Saturday, Sunday
}; void showDay(Day d)
{
switch (d)
{
case Monday:  //11行  Monday要是改成Day.Monday 编译时就会报错
System.out.println("今天是星期一");
break;
case Tuesday:
System.out.println("今天是星期二");
break;
case Wednesday:
System.out.println("今天是星期三");
break;
case Thursday:
System.out.println("今天是星期四");
break;
case Friday:
System.out.println("今天是星期五");
break;
case Saturday:
System.out.println("今天是星期六");
break;
case Sunday:
System.out.println("今天是周日");
break;
}
} public static void main(String[] args)
{
Day d = Day.Monday; //为什么这里 把Monday改为Day.Monday, 编译时会报错,这不是与11行有冲突么
  //请问到底什么时候必须用Monday, 什么时候必须用Day.Monday  ????请诸位高手指教
TestEnum2 te = new TestEnum2();
te.showDay(d); System.out.println("嘿嘿!");
}
}
/*
在JDK 1.6中的运行结果是:
-------------------
今天是星期一
嘿嘿!
-------------------
*/

解决方案 »

  1.   

    //为什么这里 把Monday改为Day.Monday, 编译时会报错,这不是与11行有冲突么
    这是因为你的Day是一个内部类, 如果你重新建一个类Day.java, 然后用 import static Day.*, 就可以了. 
      

  2.   

    答:很简单。JAVA语言规定:在switch语句的case中,只能写枚举类型中定义的常量名字。与Day是不是内部定义的无关。你看一下JAVA语言规范中的要求就很清楚了。
      

  3.   

    NICE  书上都没讲到这个东东
    鄙视那个写书的。
      

  4.   

    在switch语句的case中,只能写枚举类型中定义的常量名字。
      

  5.   

    你必须得明白Day是一种类型,他只能取 Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, 
    Sunday,这几个值,所以得写成Day.Monday,表示取的是Monday,然后在case语句当中发现匹配的Monday
    执行后边的语句,switch语句中的case标签只能写整数,因为枚举默认的是整数,ok!
      

  6.   


    即使这个枚举类型写在外边,你还得这样写Day.Monday;要不编译器知道你的Monday是什么意思,LZ
    只要明白Day是一种类型就可以了,你也可以这样写,如下:
    public class test
    {
       
        void showDay(Day d)
        {
            switch (d)
            {
            case Monday:  //11行  Monday要是改成Day.Monday 编译时就会报错
                System.out.println("今天是星期一");
                break;
            case Tuesday:
                System.out.println("今天是星期二");
                break;
            case Wednesday:
                System.out.println("今天是星期三");
                break;
            case Thursday:
                System.out.println("今天是星期四");
                break;
            case Friday:
                System.out.println("今天是星期五");
                break;
            case Saturday:
                System.out.println("今天是星期六");
                break;
            case Sunday:
                System.out.println("今天是周日");
                break;
            }
        }    public static void main(String[] args)
        {
            Day d = Day.Monday; //为什么这里 把Monday改为Day.Monday, 编译时会报错,这不是与11行有冲突么
                      //请问到底什么时候必须用Monday, 什么时候必须用Day.Monday  ????请诸位高手指教
            test te = new test();
            te.showDay(d);        System.out.println("嘿嘿!");
        }
    }
    enum Day {    Monday, Tuesday, Wednesday, Thursday, Friday, 
        Saturday, Sunday
    };
      

  7.   

    我要接贴了 谢谢大家,这是我的总结/*
    2008年11月9日12:34:35
    有关枚举常量的使用问题
    */public class TestEnum2
    {
    public enum Day { Monday, Tuesday, Wednesday, Thursday, Friday, 
    Saturday, Sunday
    }; void showDay(Day d)
    {
    switch (d)
    {
    case Monday:  //11行  Monday要是改成Day.Monday 编译时就会报错
    System.out.println("今天是星期一");
    break;
    case Tuesday:
    System.out.println("今天是星期二");
    break;
    case Day.Wednesday:  //17行
    System.out.println("今天是星期三");
    break;
    case Thursday:
    System.out.println("今天是星期四");
    break;
    case Friday:
    System.out.println("今天是星期五");
    break;
    case Saturday:
    System.out.println("今天是星期六");
    break;
    case Sunday:
    System.out.println("今天是周日");
    break;
    }
    } public static void main(String[] args)
    {
    Day d = Day.Monday; //37行  为什么这里 把Monday改为Day.Monday, 编译时会报错,这不是与11行有冲突么
       //请问到底什么时候必须用Monday, 什么时候必须用Day.Monday  ????请诸位高手指教
    TestEnum2 te = new TestEnum2();
    te.showDay(d); switch (d)
    {
    case Monday:  //44行 Monday 要是改为Day.Monday 同样会出错 出错的提示信息是:“枚举 switch case 标签必须为枚举常量的非限定名称”
    System.out.println("今天是星期一");
    break;
    case Tuesday:
    System.out.println("今天是星期二");
    break;
    case Wednesday:
    System.out.println("今天是星期三");
    break;
    case Thursday:
    System.out.println("今天是星期四");
    break;
    case Friday:
    System.out.println("今天是星期五");
    break;
    case Saturday:
    System.out.println("今天是星期六");
    break;
    case Sunday:
    System.out.println("今天是周日");
    break;
    } System.out.println("嘿嘿!");
    }
    }
    /*
    在JDK 1.6中的运行结果是:
    -------------------
    今天是星期一
    嘿嘿!
    -------------------
    总结:
    11和44行只能用Monday,不能用Day.Monday
    37行只能用Day.Mondy, 不能用Monday
    之所以如此,据某网友的说法,case标签只能使用枚举常量,即如果枚举常量是在case
    中是使用的话,则规定不能在枚举常量的前面加类名,其他地方要使用枚举常量的话,则
    必须得都加类名来作为限定符
    11和44行是在case中,所以Monday前面不能加类名Day
    37行不是在case中使用,所以必须在前面加类名Day 比如:如果把17行的Wednesday改为Day.Wednesday,则编译时会提示如下信息:
    --------------------
    TestEnum2.java:17: 枚举 switch case 标签必须为枚举常量的非限定名称
                    case Day.Wednesday:
                            ^
    1 错误
    --------------------
    */