Java 枚举类型的基础和高级用法
2015-11-16 23:12
639 查看
java枚举类型自从jdk1.5产生以来,在自己的工作用很少使用到,或许还是使用以前常量定义的方式,所以没有意识到枚举类型是可以替代的,关于使用常量方式来列举的用法不再陈述,相信在使用过程中大家如果会总结,总会发现一些弊端,下面看看枚举类型的用法,是可以替代上述的常量的方式列举事物的。
最为常用的列举:
往枚举中添加自定义方法
上面的getName方法也就是自己定义的一个静态方法,可以直接使用,也就是说在枚举类型的内部,可以存在与枚举相关的方法,但是因为枚举本身被定义为final了,所以这种方法一般都是返回数据。
覆盖枚举的方法
这里的toString 方法,在没有重新之前,默认是可以直接调用的,但是其返回值为枚举的常量值,如:RED或YELLO等,但是复写之后,就可以实现自己定义的方式。
枚举实现接口
通过实现接口,能够实现其他的一些变量和接口中的方法,为枚举开拓更多的用法。
使用接口组织枚举
这样,就可以讲不同的行为与每个枚举常量关联起来,使得每个枚举常量本身带有一个方法,最后通过常量类型调用该方法就是得到相应的值。
最为常用的列举:
public enum Color { RED, GREEN, BLANK, YELLOW }
往枚举中添加自定义方法
public enum Color { RED("红色", 1), GREEN("绿色", 2), 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 方法 忽略 }
上面的getName方法也就是自己定义的一个静态方法,可以直接使用,也就是说在枚举类型的内部,可以存在与枚举相关的方法,但是因为枚举本身被定义为final了,所以这种方法一般都是返回数据。
覆盖枚举的方法
public enum Color { RED("红色", 1), GREEN("绿色", 2), 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; } // get set 方法 忽略 }
这里的toString 方法,在没有重新之前,默认是可以直接调用的,但是其返回值为枚举的常量值,如:RED或YELLO等,但是复写之后,就可以实现自己定义的方式。
枚举实现接口
public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour{ RED("红色", 1), GREEN("绿色", 2), 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 } }6.构造抽象方法,要求枚举实现
public enum Phone{ APPLE {double totalprice(double a,double b){return a+b;}}, HUAWEI {double totalprice(double a,double b){return a+b-2;}}, SUMSANG {double totalprice(double a,double b){return a+b-4;}}; abstract totalprice(doublea,double b); }
这样,就可以讲不同的行为与每个枚举常量关联起来,使得每个枚举常量本身带有一个方法,最后通过常量类型调用该方法就是得到相应的值。
相关文章推荐
- Java学习笔记
- Java: 正则表达式
- java Socket 传输对象的时候程序没反应了。
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- java实现冒泡算法
- Java基础学习总结——Java对象的序列化和反序列化
- Java用ArrayList实现栈
- Java日期与时间的处理/Date,String,Calendar转换
- Java锁的种类以及辨析(四):可重入锁
- 2._尚硅谷_佟刚_JavaWEB_Servlet-2
- Spring Learning
- Java笔记之String
- Java锁的种类以及辨析(三):阻塞锁
- Java锁的种类以及辨析(二):自旋锁的其他种类
- Java笔记之数组
- Java用ArrayList实现队列
- Java 计算日期加、减一天
- java锁的种类以及辨析(一):自旋锁
- java 中基本类型和字符串之间的相互转换
- electron(1)安装和使用