background image

4         LARGE; 
5     } 
6     public static void main(String[] args){ 
7         //

 

两种获得枚举类型的方法

8         Size s1 = Size.SMALL; 
9         //valueOf 的函数原型为<T extends Enum<T>> T valueOf(Class<T> enumType,String 
name)
10         Size s2 = Enum.valueOf(Size.class, "SMALL");
11         //Size(自定义枚举)的 valueOf 方法是 Java 编译器在生成字节码的时候自动插入的。
12         Size s3 = Size.valueOf("MEDIUM");//1
13 
14         //结果同上,枚举重载了 equals 方法
15         System.out.println("Size.MEDIUM.equals(Enum.valueOf(Size.class, \"MEDIUM\")):"+
16                 Size.MEDIUM.equals(Enum.valueOf(Size.class, "MEDIUM")));
17 
18         //遍历枚举类型中所有的成员,这里应用的 Size.values 方法和 Size.valueOf 方法
19         //一样均是编译器在生成字节码的时候自动插入的。
20         for(Size s:Size.values()){//2
21             //ordinal()和 name()方法均为 Enum 提供的方法,返回枚举常量在声明时的构
22             //造函数中自动调用超类构造函数时传入的自身字符串名和在声明列表中的序

23             System.out.println(s.ordinal()+"  "+s.name()+"  "+s.toString());
24         }
25         //compareTo 方法缺省比较的是枚举常量的 ordinal()的返回值。
26         if (s1.compareTo(s3) < 0)
27             System.out.println("Size.SMALL is less than Size.MEDIUM");
28     }
  7. 在枚举中可以声明基于特定常量的类主体,见如下代码:
1     public enum Size { 
2         //Small、ExtraLarge 和 ExtraExtraLarge 均使用自定义的 getPricingFactor 
3         //方法覆盖 Size 提供的缺省 getPricingFactor

 

方法。

4         Small { 
5             @Override 
6             public double getPricingFactor() { 
7                 return 0.8; 
8             } 
9         },
10         //Medium 和 Large 将使用 Size 内部缺省实现的 getPricingFactor 方法。
11         Medium,
12         Large,
13         ExtraLarge {
14             @Override
15             public double getPricingFactor() {
16                 return 1.2;