toweek类型在java中_Java中的枚举类型Enum

3. 比较枚举常量

判断两个枚举类型常量的值是否相等,可以直接使用“==”,而不用equals()方法。比较两个枚举类型常量的值的大小,可以使用compareTo()方法。

public static void main(String[] args) {

Week mon = Week.MONDAY;

Week tues = Week.TUESDAY;

Week wed = Week.WEDNESDAY;

//比较枚举常量,实际上是比较它们序数的大小

System.out.println(mon.compareTo(tues));

System.out.println(tues.compareTo(wed));

System.out.println(wed.compareTo(mon));

}

输出结果如下:

-1

-1

2

实际上,比较两个枚举常量的大小,就是比较它们序数ordinal的大小。在JDK1.6的Enum源码中compareTo()方法如下:

public final int compareTo(E o) {

Enum other = (Enum)o;

Enum self = this;

if (self.getClass() != other.getClass() && // optimization

self.getDeclaringClass() != other.getDeclaringClass())

throw new ClassCastException();

return self.ordinal - other.ordinal;

}

4. 创建枚举常量

创建枚举常量主要有三种方法:直接利用枚举类型创建枚举常量、使用Enum的valueOf()静态方法创建枚举常量、使用枚举类型的valueOf()静态方法创建枚举常量。

//直接创建枚举常量

Week mon = Week.MONDAY;

//使用Enum的valueOf()静态方法创建枚举常量

Week tues = Enum.valueOf(Week.class, "TUESDAY");

//使用枚举类型的valueOf()静态方法创建枚举常量

Week wed = Week.valueOf("WEDNESDAY");

5. 定义高级的枚举类型

根据需要,可以在枚举类型中添加构造器、方法和字段,还可以让枚举类型继承接口。

定义接口IWeek,如下:

public interface IWeek {

public void println();

}

定义高级的枚举类型AdvancedWeek,拥有自己的构造器、方法和字段,并实现IWeek接口。

public enum AdvancedWeek

implements IWeek{

MONDAY("星期一", "Mon."),

TUESDAY("星期二", "Tues."),

WEDNESDAY("星期三", "Wed."),

THURSDAY("星期四", "Thurs."),

FRIDAY("星期五", "Fri."),

SATURDAY("星期六", "Sat."),

SUNDAY("星期日", "Sun.");

private String nameCn;

private String abbreviation;

//构造方法只能为private

private AdvancedWeek() {}

private AdvancedWeek(String nameCn, String abbreviation) {

this.setNameCn(nameCn);

this.setAbbreviation(abbreviation);

}

public String getNameCn() {

return nameCn;

}

public void setNameCn(String nameCn) {

this.nameCn = nameCn;

}

public String getAbbreviation() {

return abbreviation;

}

public void setAbbreviation(String abbreviation) {

this.abbreviation = abbreviation;

}

public void println() {

System.out.println(this.ordinal() + " - " + this.name() + " - " + this.getAbbreviation() + " - " + this.getNameCn());

}

}

需要注意的是,枚举类型的构造方法只能为private。

测试AdvancedWeek,如下:

public static void main(String[] args) {

AdvancedWeek[] days = AdvancedWeek.values();

for(AdvancedWeek day : days) {

day.println();

}

}

输出结果为:

0 - MONDAY - Mon. - 星期一

1 - TUESDAY - Tues. - 星期二

2 - WEDNESDAY - Wed. - 星期三

3 - THURSDAY - Thurs. - 星期四

4 - FRIDAY - Fri. - 星期五

5 - SATURDAY - Sat. - 星期六

6 - SUNDAY - Sun. - 星期日

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值