下面代码是 corejava8中的实例代码, Size.class有点不懂,我看了枚举里面没有这个变量。谢谢!public class EnumTest
{  
   public static void main(String[] args)
   {  
      Scanner in = new Scanner(System.in);
      System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
      String input = in.next().toUpperCase();
      Size size = Enum.valueOf(, input);
      System.out.println("size=" + size);
      System.out.println("abbreviation=" + size.getAbbreviation());
      if (size == Size.EXTRA_LARGE)
         System.out.println("Good job--you paid attention to the _.");      
   }
}

解决方案 »

  1.   

    首先,你这句话:
      Size size = Enum.valueOf(, input);
    漏了个啥。其次,Size 是啥?难道不是枚举么?第三:
      if (size == Size.EXTRA_LARGE)
    显然Size这个东西是有明确定义滴
      

  2.   

    不好意思,完整代码如下:import java.util.*;/**
     * This program demonstrates enumerated types.
     * @version 1.0 2004-05-24
     * @author Cay Horstmann
     */
    public class EnumTest
    {  
       public static void main(String[] args)
       {  
          Scanner in = new Scanner(System.in);
          System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
          String input = in.next().toUpperCase();
          Size size = Enum.valueOf(Size.class, input);
          System.out.println("size=" + size);
          System.out.println("abbreviation=" + size.getAbbreviation());
          if (size == Size.EXTRA_LARGE)
             System.out.println("Good job--you paid attention to the _.");      
       }
    }enum Size
    {
       SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");   private Size(String abbreviation) { this.abbreviation = abbreviation; }
       public String getAbbreviation() { return abbreviation; }   private String abbreviation;
    }枚举中 有Size.class这个吗
      

  3.   

    enum Size {实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类(java.lang.Enum<E>),它们继承了这个Enum中所有方法。
    参见:
    http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html
      

  4.   

    if (size == Size.EXTRA_LARGE)
    应该改为if (size .equals(Size.EXTRA_LARGE)))
      

  5.   

    if (size == Size.EXTRA_LARGE)
    应该改为if (size .equals(Size.EXTRA_LARGE))
      

  6.   


    一般来说,对象比较确实需要用equals,不过枚举类型可以用==。因为枚举类型类似于享元,都是相同的对象实例。实际上你可以看看 Enum 所重写的equals()函数:
    public final boolean equals(Object other) { 
            return this==other; 
    }
      

  7.   

    Size size = Enum.valueOf(Size.class, input);我想问的是这句里面Size.class 这个用法,枚举有class这个变量 啥意思不太懂  api找不到这个class。
    它们继承了这个Enum中所有方法, values方法在api文档里面为啥找不到呢 谢谢!
      

  8.   

    首先 “enum Size” 实际上就定义了一个 类:Size,它继承了 java.lang.Enum 以及 java.lang.ObjectSize.class 这是个属性,所有类都会有这个属性,你可以试试看: Object.class 或者 String.class至于values()方法,前面也说了是编译时生成的,不是继承自Enum的。你可以用 javap 来查看下Size所生成的class文件就知道了啊,这里有例子:
    http://wenwen.soso.com/z/q273119133.htm