Java Enum用法小结
2016-01-12 22:39
459 查看
用法一:常量
在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。public enum Color {
RED, GREEN, BLANK, YELLOW
}
用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
用法三:向枚举中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。package myEnum.test;
public enum TestMyEnum {
ONE("1",1,1.2),TWO("2",2,3.4);
private String name;
private int age;
private double weight;
private TestMyEnum(String name, int age, double weight) {
this.name = name;
this.age = age;
this.weight = weight;
}
@Override
public String toString() {
return "age=" + age + ", weight=" + weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
用法四:使用接口组织枚举
所有的枚举都继承自java.lang.Enum类,由于Java不支持多继承,所以枚举对象不能再继承其他类;对于enum而言,实现接口是其实现子类化的唯一办法。
package
myEnum.test;
/**
* @Description: TODO
* @author wangy
* @date 2016年1月12日 下午10:05:39
*/
public interface ITestMyEnum {
public String getDescription() ;
public enum Fruit implements ITestMyEnum{
Apple(1,"red"), Orange(3,"yellow"), banana(4,"yellow");
private Fruit(int weight, String description) {
this.weight = weight;
this.description = description;
}
private int weight;
private String description;
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
public enum Food implements ITestMyEnum{
Rice(1,"whit"), Meat(3,"red"), Corn(4,"yellow");
private Food(int weight, String description) {
this.weight = weight;
this.description = description;
}
private int weight;
private String description;
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
}
小结:
0、enum枚举类型是一个不可以被继承的final类1、values()方法可用来返回接口中的一个数组,即该枚举中定义的常量枚举;
2、name()方法会返回当前枚举值的名字。
常用的几个方法:
public
final String name()//返回枚举常量的名称;
public final int ordinal()//返回枚举常量在枚举类型中的位置,第一个枚举值序号为0,依次类推;
public String toString()//返回枚举常量的名字,可以重写此方法;
public static valueOf(enumType,String name)//返回与name名字相对应的枚举常量;
用法五:应用枚举定义一个类映射到数据库表(转载)
http://www.oschina.net/question/54100_21934Java 中一个典型的枚举类型,看似字符串值,但包含一些附加的信息,包括排序以及附加的方法可以获取枚举值的信息。
下面是一个基本的枚举类型:
?
?
接下来我们要做的是枚举类型对接口的继承以及实际的用途。
为了显示工作过程,我们首先做一个接口,用来实现类和数据库表的一个映射:
?
接下来我们创建一个新的 Java 类用以定义和数据库之间的映射关系:
?
例如下面这样写不是更简单吗?
?
?
?
首先,我们为枚举添加一个接口:
?
?
?
?
枚举类型可以存储附加的数据和方法
枚举类型可通过接口来定义行为
枚举类型的项行为可通过接口来访问,跟正常的 Java 类无异
values() 方法可用来返回接口中的一个数组
总而言之,你可以像使用普通 Java 类一样来使用枚举类型。
用法六:枚举泛型使用(转载)
http://www.myexception.cn/program/1586060.html对于enum而言,实现接口是其实现子类化的唯一办法。在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组,可以达到将枚举元素分类组织的目的。如下示例,用enum来表示不同类别的食物,但同时希望每个enum元素仍然保持Food类型。
package enumerated.menu; import net.mindview.util.*; public enum Meal2 { APPETIZER(Food.Appetizer.class), MAINCOURSE(Food.MainCourse.class), DESSERT( Food.Dessert.class), COFFEE(Food.Coffee.class); private Food[] values; private Meal2(Class<? extends Food> kind) { values = kind.getEnumConstants(); } public interface Food { enum Appetizer implements Food { SALAD, SOUP, SPRING_ROLLS; } enum MainCourse implements Food { LASAGNE, BURRITO, PAD_THAI, LENTILS, HUMMOUS, VINDALOO; } enum Dessert implements Food { TIRAMISU, GELATO, BLACK_FOREST_CAKE, FRUIT, CREME_CARAMEL; } enum Coffee implements Food { BLACK_COFFEE, DECAF_COFFEE, ESPRESSO, LATTE, CAPPUCCINO, TEA, HERB_TEA; } } public Food randomSelection() { return Enums.random(values); } public static void main(String[] args) { for (int i = 0; i < 5; i++) { for (Meal2 meal : Meal2.values()) { Food food = meal.randomSelection(); System.out.println(food); } System.out.println("---"); } } }
下面是Enums工具类,实现从枚举实例中随机选择,<T extends Enum<T>>表示T是一个枚举实例。将Class<T>作为参数,就可以利用Class对象得到enum实例的数组了。重装后的random()方法只需要使用T[]作为参数,它从数组中随机选择一个元素。
//: net/mindview/util/Enums.java package net.mindview.util; import java.util.*; public class Enums { private static Random rand = new Random(47); public static <T extends Enum<T>> T random(Class<T> ec) { return random(ec.getEnumConstants()); } public static <T> T random(T[] values) { return values[rand.nextInt(values.length)]; } } ///:~
输出结果:
SPRING_ROLLS
VINDALOO
FRUIT
DECAF_COFFEE
---
SOUP
VINDALOO
FRUIT
TEA
---
SALAD
BURRITO
FRUIT
TEA
---
SALAD
BURRITO
CREME_CARAMEL
LATTE
---
SOUP
BURRITO
TIRAMISU
ESPRESSO
---
嵌入在Food中的每个enum都实现了Food接口,该接口的作用就是将其所包含的enum组合成一个公共类型,这一点是必要的。然后Meal2才能将Food中的enum作为构造器参数使用,每一个Meal2实例都将其对应的class实例对象作为构造器参数。通过getEnumConstants()方法,可以取得某个Food子类的所有enum实例。这些实例在randomSelection中被用到。因此可以从Meal2实例中随机选择一个Food,生成一份菜单。我们通过遍历每一个Meal2实例得到“枚举的枚举”的值。
相关文章推荐
- java_62_SE lesson 9
- Java 执行过程详解 - JVM 生命周期
- 【工具优化】Eclipse设置(包括优化、易用性、必备插件等的说明)----持续更新
- 应用 EditPlus 配置 Java 编译环境
- [五]SpringMvc学习-Restful风格实现
- javax.swing.JComponent 调用顺序
- java学习第一步
- Java就业指导
- java常用集合总结
- [JAVA修炼之路四]-JVM内存模型以及对象实例化过程
- C和Java效率对比试验和编译器优化影响
- java集合总结
- 文件夹复制的Java实现
- JAVASE之输入输出流
- JDK 环境变量配置及常见问题
- JavaWeb的Cookie技术显示历史商品( 信息 )浏览记录(学习方立勋老师的教程)
- 从Eclipse里导出Android程序到手机里
- [四]SpringMvc学习-对servlet与json的支持与实现
- java 伪随机数类
- Java类集框架