求枚举的深入解说 http://blog.csdn.net/ishallwin/article/details/9440251看下这个吧,用的时候直接用就可以了,不用深究太多,毕竟Java要学的还是很多...... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 枚举是限定有限可能值的一种手段,使用枚举可以降低程序出错的几率,并可以提高代码的可读性与可维护性。Java中的枚举并不是简单常量的集合,而是一个对象,其本质依然是类,所以Java中的枚举除了提供一系列相关值以外,还提供了一些额外功能,甚至还可以根据需要自行添加一些功能。定义枚举需要使用关键字enum。用法一:常量public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switchenum 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; } } } 用法三:向枚举中添加新方法public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } } 用法四:覆盖枚举的方法public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } //覆盖方法 @Override public String toString() { return this.index+"_"+this.name; } } 用法五:实现接口public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour{ RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } //接口方法 @Override public String getInfo() { return this.name; } //接口方法 @Override public void print() { System.out.println(this.index+":"+this.name); } } 用法六:使用接口组织枚举public interface Food { enum Coffee implements Food{ BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO } enum Dessert implements Food{ FRUIT, CAKE, GELATO } } 用法七:关于枚举集合的使用java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。 一个 枚举实现接口的例子/** * 表映射为对象类 * */ public class TableObjects { public enum ColumnType { INTEGER,DOUBLE,CHAR,VARCHAR,FLOAT } interface table { ColumnType getType(); int getColLength(); String getColName(); table getColumn(String colName); table[] getColumns(); } public enum t_user implements table { //id的长度无论是否设置都是11(mysql数据库) id("id",11,ColumnType.INTEGER), username("username",30,ColumnType.VARCHAR), password("password",30, ColumnType.VARCHAR); String colName = null; int colLength = 0; ColumnType type = null; public String getColName() { return colName; } public int getColLength() { return colLength; } public ColumnType getType() { return type; } private t_user(String colName, int colLength, ColumnType type) { this.colName = colName; this.colLength = colLength; this.type = type; } /** * 根据列名获取列结构 * @param colName * @return */ public t_user getColumn(String colName) { for (t_user colEnum : t_user.values()) { if(colName.equals(colEnum.getColName())) { return colEnum; } } return null; } /** * 获取所有列结构 * @return */ public t_user[] getColumns() { return t_user.values(); } } /** * 下面继续写别的映射类,有多少写多少 */ } 这两种 定义String的区别 在Java中,如何监听树的节点的鼠标双击事件? 这样可以为什么这样就不可以了呢 整型-4转化为4个字节是不是11111111 11111111 11111111 11111100? Linux下mysql驱动问题,大家请进 关于Pettern的问题 看着身边的朋友越来越多学JAVA,我忍不住说:JAVA不好,真的不好。 关于 JCreator 与 JDK 的问题!!! jdbc-odbc数据库连接问题,请帮忙解决,很头疼,想不出来 FileOutputStream自动覆盖文件的问题 测试ConcurrentHashMap是否读写安全 大婶帮我解答一下
定义枚举需要使用关键字enum。
用法一:常量
public enum Color {
RED, GREEN, BLANK, YELLOW
}
用法二:switch
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;
}
}
}
用法三:向枚举中添加新方法
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
用法四:覆盖枚举的方法
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//覆盖方法
@Override
public String toString() {
return this.index+"_"+this.name;
}
}
用法五:实现接口
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//接口方法
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}
用法六:使用接口组织枚举
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
用法七:关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。
/**
* 表映射为对象类
*
*/
public class TableObjects {
public enum ColumnType {
INTEGER,DOUBLE,CHAR,VARCHAR,FLOAT
}
interface table
{
ColumnType getType();
int getColLength();
String getColName();
table getColumn(String colName);
table[] getColumns();
}
public enum t_user implements table
{
//id的长度无论是否设置都是11(mysql数据库)
id("id",11,ColumnType.INTEGER),
username("username",30,ColumnType.VARCHAR),
password("password",30, ColumnType.VARCHAR);
String colName = null;
int colLength = 0;
ColumnType type = null;
public String getColName() {
return colName;
}
public int getColLength() {
return colLength;
}
public ColumnType getType() {
return type;
}
private t_user(String colName, int colLength, ColumnType type)
{
this.colName = colName;
this.colLength = colLength;
this.type = type;
}
/**
* 根据列名获取列结构
* @param colName
* @return
*/
public t_user getColumn(String colName) {
for (t_user colEnum : t_user.values()) {
if(colName.equals(colEnum.getColName()))
{
return colEnum;
}
}
return null;
}
/**
* 获取所有列结构
* @return
*/
public t_user[] getColumns()
{
return t_user.values();
}
}
/**
* 下面继续写别的映射类,有多少写多少
*/
}