java 枚举
Posted 草木物语
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 枚举相关的知识,希望对你有一定的参考价值。
枚举是一种特殊的数据,它的取值是有限的,是可以枚举出来的,比如一年有四季、一周有七天。虽然使用类也可以处理这种数据,但枚举类型更为简洁、安全和方便。
枚举的好处体现在以下几方面。
- 定义枚举的语法更为简洁。
- 枚举更为安全。一个枚举类型的变量,它的值要么为null,要么为枚举值之一,不可能为其他值,但使用整型变量,它的值就没有办法强制,值可能就是无效的。
- 枚举类型自带很多便利方法(如values、valueOf、toString等),易于使用。
基础使用:
public enum Size { SMALL, MEDIUM, LARGE }
public class Main_5_4_1 { public static void main(String[] args) { // 使用Size Size size = Size.MEDIUM; Size size = Size.SMALL; // 枚举变量的toString方法返回其字面值,所有枚举类型也都有一个name()方法,返回值与toString()一样 System.out.println(size.toString()); // SMALL System.out.println(size.name()); // SMALL Size size = Size.SMALL; // 枚举变量可以使用equals和==进行比较,结果是一样的 System.out.println(size == Size.SMALL); // true System.out.println(size.equals(Size.SMALL));// true System.out.println(size == Size.MEDIUM);// false Size size = Size.MEDIUM; // 枚举值是有顺序的,可以比较大小。枚举类型都有一个方法int or-dinal(),表示枚举值在声明时的顺序,从0开始 System.out.println(size.ordinal()); // 1 Size size = Size.SMALL; // 枚举类型都实现了Java API中的Comparable接口,都可以通过方法compareTo与其他枚举值进行比较。比较其实就是比较ordinal的大小 System.out.println(size.compareTo(Size.MEDIUM)); // -1 // 枚举还可以用于switch语句 onChosen(Size.MEDIUM); // 枚举类型都有一个静态的valueOf(String)方法,可以返回字符串对应的枚举值 System.out.println(Size.SMALL==Size.valueOf("SMALL")); // true // 枚举类型也都有一个静态的values方法,返回一个包括所有枚举值的数组,顺序与声明时的顺序一致 for (Size size : Size.values()) { System.out.println(size); // 输出为三行,分别是SMALL、MEDIUM、LARGE。 } } static void onChosen(Size size) { switch (size) { case SMALL: System.out.println("chosen small"); break; case MEDIUM: System.out.println("chosen medium"); break; case LARGE: System.out.println("chosen large"); break; } } }
典型场景:
/** * Created by xc on 2019/11/17 * 代码清单5-13 带有实例变量和方法的枚举类Size */ public enum Size { // 枚举值的定义需要放在最上面,枚举值写完之后,要以分号(;)结尾,然后才能写其他代码。 SMALL("S", "小号"), MEDIUM("M", "中号"), LARGE("L", "大号"); /** * 缩写 */ private String abbr; /** * 中文名称 */ private String title; private Size(String abbr, String title) { this.abbr = abbr; this.title = title; } public String getAbbr() { return abbr; } public String getTitle() { return title; } /** * 根据缩写返回对应的枚举值。 * * @param abbr 缩写 * @return */ public static Size fromAbbr(String abbr) { for (Size size : Size.values()) { if (size.getAbbr().equals(abbr)) { return size; } } return null; } }
上述代码定义了两个实例变量abbr和title,以及对应的get方法,分别表示缩写和中文名称;定义了一个私有构造方法,接受缩写和中文名称,每个枚举值在定义的时候都传递了对应的值;同时定义了一个静态方法fromAbbr,根据缩写返回对应的枚举值。需要说明的是,枚举值的定义需要放在最上面,枚举值写完之后,要以分号(;)结尾,然后才能写其他代码。这个枚举定义的使用与其他类类似,比如:
public class Main_5_4_2 { public static void main(String[] args) { Size s = Size.MEDIUM; System.out.println(s.getAbbr()); //输出M s = Size.fromAbbr("L"); System.out.println(s.getTitle()); //输出“大号” } }
参考:java编程逻辑5.4
以上是关于java 枚举的主要内容,如果未能解决你的问题,请参考以下文章