日期:2014-05-20  浏览次数:20583 次

java 枚举问题!
下面代码是 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 _.");  
  }
}


------解决方案--------------------
Size需要定义!
------解决方案--------------------
enum Size {

实际上enum声明定义的类型就是一个类。 

而这些类都是类库中Enum类的子类(java.lang.Enum<E>),它们继承了这个Enum中所有方法。


参见:
http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html
------解决方案--------------------
if (size == Size.EXTRA_LARGE)
应该改为if (size .equals(Size.EXTRA_LARGE)))

------解决方案--------------------
if (size == Size.EXTRA_LARGE)
应该改为if (size .equals(Size.EXTRA_LARGE))
------解决方案--------------------
探讨
if (size == Size.EXTRA_LARGE)
应该改为if (size .equals(Size.EXTRA_LARGE)))

------解决方案--------------------
首先 “enum Size” 实际上就定义了一个 类:Size,它继承了 java.lang.Enum 以及 java.lang.Object

Size.class 这是个属性,所有类都会有这个属性,你可以试试看: Object.class 或者 String.class



至于values()方法,前面也说了是编译时生成的,不是继承自Enum的。

你可以用 javap 来查看下Size所生成的class文件就知道了啊,这里有例子:
http://wenwen.soso.com/z/q273119133.htm