|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
枚举 在过去,我们必须用整型常数代替枚举,随着J2SE 5.0的发布,这样的方式终于一去不复返了。 一个简朴的枚举类型定义如下: public enum Weather { SUNNY,RAINY,CLOUDY } 枚举可以用在switch语句中: Weather weather=Weather.CLOUDY; switch(weather) { case SUNNY: System.out.println("It\\\'s sunny"); break; case CLOUDY: System.out.println("It\\\'s cloudy"); break; case RAINY: System.out.println("It\\\'s rainy"); break; } 枚举类型可以有自己的构造方式,不过必须是私有的,也可以有其他方式的定义,如下面的代码: public enum Weather { SUNNY("It is sunny"), RAINY("It is rainy"), CLOUDY("It is cloudy"); private String description; private Weather(String description) { this.description=description; } public String description() { return this.description; } } 下面一段代码是对这个枚举的一个使用: for(Weather w:Weather.values()) { System.out.printf( "Description of %s is /"%s/"./n",w,w.description()); } Weather weather=Weather.SUNNY; System.out.println(weather.description() + " today"); 假如我们有一个枚举类型,表示四则运算,我们希望在其中定义一个方式,针对不同的值做不同的运算,那么我们可以这样定义: public enum Operation { PLUS, MINUS, TIMES, DIVIDE; // Do arithmetic op represented by this constant double eval(double x, double y){ switch(this) { case PLUS: return x + y; case MINUS: return x - y; case TIMES: return x * y; case DIVIDE: return x / y; } throw new AssertionError("Unknown op: " + this); } } 这样写的问题是你假如没有最后一行抛出非常的语句,编译就无法通过。而且假如我们想要添加一个新的运算,就必须时刻记着要在eval中添加对应的操作,万一忘记的话就会抛出非常。 J2SE 5.0提供了解决这个问题的办法,就是你可以把eval函数声明为abstract,然后为每个值写不同的实现,如下所示: public enum Operation { PLUS { double eval(double x, double y) { return x + y; } }, MINUS { double eval(double x, double y) { return x - y; } }, TIMES { double eval(double x, double y) { return x * y; } }, DIVIDE { double eval(double x, double y) { return x / y; } }; abstract double eval(double x, double y); } 这样就避免了上面所说的两个问题,不过代码量增加了一些,但是随着今后各种Java开发 IDE的改进,代码量的问题应该会被淡化。 返回类别: 教程 上一教程: 纯 jsp 操作服务器上的文本文件 [2] 下一教程: java.net 操练 您可以阅读与"J2SE 5.0实例---枚举"相关的教程: · J2SE5.0 实例---变长参数 · J2SE5.0实例---注释(annotation) · J2SE 5.0实例---原生类型的autoboxing和auto-unboxing · J2SE 5.0实例---静态引入 · J2SE5.0 实例---泛型 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |