嘿牛程序员__成都传智博客__枚举的一个带参构造函数的实现——以交通灯的转换为例
2012-06-14 01:59
330 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
枚举
一、简介
枚举,相当于定义了一个类。只是这个类有点特殊。它默认继承java.lang.Enum类。此类实现了Comparable和Serializable两个接口,证明枚举类型可以使用比较器和序列化操作。
2、枚举类的主要操作方法
protected Enum(String name,int ordinal)单独的构造方法。程序员无法调用此构造方法。该构造方法用于由响应枚举类型声明的编译器发出的代码。
public final String name()返回此枚举常量的名称,在其枚举声明中对其进行声明。 与此方法相比,大多数程序员应该优先考虑使用toString() 方法,因为 toString 方法返回更加用户友好的名称。该方法主要设计用于特殊情形,其正确性取决于获取正确的名称,其名称不会随版本的改变而改变。
public final int ordinal()返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 大多数程序员不会使用此方法。它被设计用于复杂的基于枚举的数据结构,比如 EnumSet 和 EnumMap。
public String toString()返回枚举常量的名称,它包含在声明中。可以重写此方法,虽然一般来说没有必要。当存在更加“程序员友好的”字符串形式时,应该使用枚举类型重写此方法。
public final boolean equals(Object other)当指定对象等于此枚举常量时,返回 true。
public final int hashCode()返回枚举常量的哈希码。
protected final Object clone() throws CloneNotSupportedException抛出 CloneNotSupportedException。这可保证永远不会复制枚举,这对于保留其“单元素”状态是必需的。
public final int compareTo(E o)比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时,分别返回负整数、零或正整数。枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。)
3、实现
对于无参的构造方法,引用比较简单。本程序主要解决带有参数的构造函数:因为枚举类的构造函数是私有的,所以不能被外部调用。所以它主要用于程序体内的初始化。
例题:程序要求实现交通灯的转换,并给出set、get方法用于设置转换时间。
//枚举类
package javahigh;
public enum TrafficLamp {
/**
* 本程序主要实现交通灯转换,并输出转换所用的时间
* 程序给出一个交通灯转换函数(抽象)public abstract TrafficLamp nextLamp(),并通过内部类来实现
* 程序给出一个带有参数的构造函数:private TrafficLamp(long time),用它来获取初始时间。
* 程序给出一个交通灯停顿的函数:public void getStop()
* 为了方面用户设置自己想要的时间,程序给出了set\get方法
*
* */
RED(2) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
System.out.println("红灯转绿灯,等待时间为"+getTime()+"秒");
getStop();
return GREEN;
}
},
GREEN(2) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
System.out.println("绿灯转黄灯,等待时间为"+getTime()+"秒");
getStop();
return YELLOW;
}
},
YELLOW(1) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
System.out.println("黄灯转红灯,等待时间为"+getTime()+"秒");
getStop();
return RED;
}
};
public abstract TrafficLamp nextLamp();
private long time;
private TrafficLamp(long time) {
this.time=time;
}
public void setTime(long time) {
this.time = time;
}
public long getTime() {
return time;
}
public void getStop() {
try{
Thread.sleep(1000*time);
}catch(
a3e7
Exception e){
System.out.println(e.getMessage());
}
}
}
//测试类
package javahigh;
public class TestTrafficLamp {
public static void main(String[] args) {
// TODO Auto-generated method stub
//遍历所有有枚举值,用到values()方法
for(TrafficLamp t:javahigh.TrafficLamp.values())
System.out.println("交通灯 value:"+ t);
//获得某个枚举的值,用到valueOf(String类型)
System.out.println(javahigh.TrafficLamp.valueOf("RED").toString());
//调用枚举类,因为枚举类是一个抽象类,所以不能实例化(TrafficLamp tr=new TrafficLam;)
//只能通过访问的形式去调用(TrafficLamp tr=TrafficLamp.枚举对象;)
TrafficLamp trafficLamp1=javahigh.TrafficLamp.RED;
//测试并输出枚举对应的值
System.out.println(trafficLamp1.name());
//设置停顿 的时间
trafficLamp1.setTime(3);
//执行交通灯交换
trafficLamp1.nextLamp();
TrafficLamp trafficLamp2=javahigh.TrafficLamp.GREEN;
trafficLamp2.setTime(3);
trafficLamp2.nextLamp();
TrafficLamp trafficLamp3=javahigh.TrafficLamp.YELLOW;
trafficLamp3.setTime(2);
trafficLamp3.nextLamp();
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
枚举
一、简介
枚举,相当于定义了一个类。只是这个类有点特殊。它默认继承java.lang.Enum类。此类实现了Comparable和Serializable两个接口,证明枚举类型可以使用比较器和序列化操作。
2、枚举类的主要操作方法
protected Enum(String name,int ordinal)单独的构造方法。程序员无法调用此构造方法。该构造方法用于由响应枚举类型声明的编译器发出的代码。
public final String name()返回此枚举常量的名称,在其枚举声明中对其进行声明。 与此方法相比,大多数程序员应该优先考虑使用toString() 方法,因为 toString 方法返回更加用户友好的名称。该方法主要设计用于特殊情形,其正确性取决于获取正确的名称,其名称不会随版本的改变而改变。
public final int ordinal()返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 大多数程序员不会使用此方法。它被设计用于复杂的基于枚举的数据结构,比如 EnumSet 和 EnumMap。
public String toString()返回枚举常量的名称,它包含在声明中。可以重写此方法,虽然一般来说没有必要。当存在更加“程序员友好的”字符串形式时,应该使用枚举类型重写此方法。
public final boolean equals(Object other)当指定对象等于此枚举常量时,返回 true。
public final int hashCode()返回枚举常量的哈希码。
protected final Object clone() throws CloneNotSupportedException抛出 CloneNotSupportedException。这可保证永远不会复制枚举,这对于保留其“单元素”状态是必需的。
public final int compareTo(E o)比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时,分别返回负整数、零或正整数。枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。)
3、实现
对于无参的构造方法,引用比较简单。本程序主要解决带有参数的构造函数:因为枚举类的构造函数是私有的,所以不能被外部调用。所以它主要用于程序体内的初始化。
例题:程序要求实现交通灯的转换,并给出set、get方法用于设置转换时间。
//枚举类
package javahigh;
public enum TrafficLamp {
/**
* 本程序主要实现交通灯转换,并输出转换所用的时间
* 程序给出一个交通灯转换函数(抽象)public abstract TrafficLamp nextLamp(),并通过内部类来实现
* 程序给出一个带有参数的构造函数:private TrafficLamp(long time),用它来获取初始时间。
* 程序给出一个交通灯停顿的函数:public void getStop()
* 为了方面用户设置自己想要的时间,程序给出了set\get方法
*
* */
RED(2) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
System.out.println("红灯转绿灯,等待时间为"+getTime()+"秒");
getStop();
return GREEN;
}
},
GREEN(2) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
System.out.println("绿灯转黄灯,等待时间为"+getTime()+"秒");
getStop();
return YELLOW;
}
},
YELLOW(1) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
System.out.println("黄灯转红灯,等待时间为"+getTime()+"秒");
getStop();
return RED;
}
};
public abstract TrafficLamp nextLamp();
private long time;
private TrafficLamp(long time) {
this.time=time;
}
public void setTime(long time) {
this.time = time;
}
public long getTime() {
return time;
}
public void getStop() {
try{
Thread.sleep(1000*time);
}catch(
a3e7
Exception e){
System.out.println(e.getMessage());
}
}
}
//测试类
package javahigh;
public class TestTrafficLamp {
public static void main(String[] args) {
// TODO Auto-generated method stub
//遍历所有有枚举值,用到values()方法
for(TrafficLamp t:javahigh.TrafficLamp.values())
System.out.println("交通灯 value:"+ t);
//获得某个枚举的值,用到valueOf(String类型)
System.out.println(javahigh.TrafficLamp.valueOf("RED").toString());
//调用枚举类,因为枚举类是一个抽象类,所以不能实例化(TrafficLamp tr=new TrafficLam;)
//只能通过访问的形式去调用(TrafficLamp tr=TrafficLamp.枚举对象;)
TrafficLamp trafficLamp1=javahigh.TrafficLamp.RED;
//测试并输出枚举对应的值
System.out.println(trafficLamp1.name());
//设置停顿 的时间
trafficLamp1.setTime(3);
//执行交通灯交换
trafficLamp1.nextLamp();
TrafficLamp trafficLamp2=javahigh.TrafficLamp.GREEN;
trafficLamp2.setTime(3);
trafficLamp2.nextLamp();
TrafficLamp trafficLamp3=javahigh.TrafficLamp.YELLOW;
trafficLamp3.setTime(2);
trafficLamp3.nextLamp();
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 嘿牛程序员__成都传智博客__枚举的一个带有case的普通实现——以星期的转换为例
- 嘿牛程序员_成都传智博客_讨论字符串中字符出现的次数(续一:通过数组实现按次序输出)
- 嘿牛程序员__成都传智博客__文件的拷贝:实现整个文件夹的拷贝
- 嘿牛程序员__成都传智博客__包装类(一)
- 嘿牛程序员_成都传智博客_讨论字符串中字符出现的次数
- 嘿牛程序员__成都传智博客__包装类(二)
- 嘿牛程序员_成都传智博客_讨论字符串中字符出现的次数(续一:通过数组实现按次序输出)
- 嘿牛程序员__成都传智博客__网络编程(下)
- 嘿牛程序员__成都传智博客__文件的拷贝:单个文件的拷贝(下)
- 嘿牛程序员__成都传智博客__javascript的注册表单验证、提交问题
- 嘿牛程序员__成都传智博客__文件的拷贝:单个文件的拷贝(上)
- 嘿牛程序员__成都传智博客__可变参数举例
- 嘿牛程序员__成都传智博客__JavaScript中的复选框的全选、反选问题
- CSDN博客:对于一个程序员,写程序就是实现功能,遇到具体问题,解决这个问题,并记录问题到CSDN上,从而有所提高和互相帮助。
- 用枚举来实现一个交通灯
- 一个程序员的博客开通了
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- mybatis枚举自动转换(通用转换处理器实现)
- 将一个字符串转换为整型数的实现
- 输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)