§ ITPOW >> 文档 >> Java

Java 中枚举的不便之处,以及强大的枚举功能

作者:vkvi 来源:ITPOW(原创) 日期:2022-11-27

先说 Java 枚举的不便之处

定义一个枚举,直接用中文。

enum Session {
	春天,
	夏天,
	秋天,
	冬天
}

看看应用:

System.out.println(Session.夏天); // 夏天
System.out.println(Session.夏天.ordinal()); // 1
System.out.println(Session.夏天.name()); // 夏天

夏天位于第 2 个,所以 oridinal 为 1。

再看看循环枚举项:

Session[] sessions = Session.values();
 for (var s : sessions)
 {
	System.out.println(s.name() + " = " + s.ordinal());
 }

循环倒也方便,直接 values() 得数组,然后配合 name()ordinal() 使用。

不便之处

1、不能直接“春天 = 10”来改变枚举项的值,还好可以通过其他方式实现,但是代码写得有点长。

2、无法将 int 转换成对应的枚举值,比如在其他语言中 (Session)0,在本例中得到的就是:Session.春天,然而 Java 不行。

Java 枚举的强大之处

Java 枚举,居然可以像类一样定义字段、构造方法(private 的)。

enum Session {
	春天(10, "Spring"),
	夏天(20, "Summer"),
	秋天(30, "Autumn"),
	冬天(40, "Winter");

	private int value;
	private String name;

	private Session(int value, String name) {
		this.value = value;
		this.name = name;
	}

	public int getValue() {
		return value;
	}

	public String getName() {
		return name;
	}
}

应用:

Session[] sessions = Session.values();
for (var s : sessions)
{
	System.out.println(s.name() + " " + s.ordinal() + " " + s.getValue() + " " + s.getName());
}

效果:

春天 0 10 Spring

夏天 1 20 Summer

秋天 2 30 Autumn

冬天 3 40 Winter

相关文章