java新特性之枚举
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java新特性之枚举相关的知识,希望对你有一定的参考价值。
一、多例模式
多例模式实现方式一
package cn4; public class MultiInstance { //提供有限个实例化对象 public static final MultiInstance FRONT = new MultiInstance(); public static final MultiInstance BEHIND = new MultiInstance(); public static final MultiInstance LEFT = new MultiInstance(); public static final MultiInstance RIGHT = new MultiInstance(); //构造方法私有化 private MultiInstance(){ } } package cn4; public class Test { public static void main(String[] args) { MultiInstance front = MultiInstance.FRONT; MultiInstance behind = MultiInstance.BEHIND; MultiInstance left = MultiInstance.LEFT; MultiInstance right = MultiInstance.RIGHT; System.out.println(front); System.out.println(behind); System.out.println(left); System.out.println(right); } }
多例模式实现方式二
package cn4; public class MultiInstance2 { //提供有限个实例化对象 public static final MultiInstance2 FRONT = new MultiInstance2("前"); public static final MultiInstance2 BEHIND = new MultiInstance2("后"); public static final MultiInstance2 LEFT = new MultiInstance2("左"); public static final MultiInstance2 RIGHT = new MultiInstance2("右"); private String name; //构造方法私有化 private MultiInstance2(String name){ this.name = name; } public String getName(){ return this.name; } } package cn4; public class Test2 { public static void main(String[] args) { MultiInstance2 front = MultiInstance2.FRONT; MultiInstance2 behind = MultiInstance2.BEHIND; MultiInstance2 left = MultiInstance2.LEFT; MultiInstance2 right = MultiInstance2.RIGHT; System.out.println(front); System.out.println(behind); System.out.println(left); System.out.println(right); System.out.println(front.getName()); System.out.println(behind.getName()); System.out.println(left.getName()); System.out.println(right.getName()); } }
前
后
左
右
多例模式实现方式三
package cn4; public abstract class MultiInstance3 { //提供有限个实例化对象 public static final MultiInstance3 FRONT = new MultiInstance3("前"){ @Override public void show() { System.out.println("这是前面哦"); } }; public static final MultiInstance3 BEHIND = new MultiInstance3("后"){ @Override public void show() { System.out.println("这是后面哦"); } }; public static final MultiInstance3 LEFT = new MultiInstance3("左"){ @Override public void show() { System.out.println("左这是边哦"); } }; public static final MultiInstance3 RIGHT = new MultiInstance3("右"){ @Override public void show() { System.out.println("这是后边哦"); } }; private String name; //构造方法私有化 private MultiInstance3(String name){ this.name = name; } public String getName(){ return this.name; } public abstract void show(); } package cn4; public class Test3 { public static void main(String[] args) { MultiInstance3 front = MultiInstance3.FRONT; MultiInstance3 behind = MultiInstance3.BEHIND; MultiInstance3 left = MultiInstance3.LEFT; MultiInstance3 right = MultiInstance3.RIGHT; System.out.println(front); System.out.println(behind); System.out.println(left); System.out.println(right); System.out.println(front.getName()); System.out.println(behind.getName()); System.out.println(left.getName()); System.out.println(right.getName()); front.show(); behind.show(); left.show(); right.show(); } }
前
后
左
右
这是前面哦
这是后面哦
左这是边哦
这是后边哦
但是如果我们写多例模式也这样实在是太麻烦了。jdk为我们提供了枚举。
根据多例模式实现一对应的枚举一
package cn4; public enum Color { RED,GREEN,BLUE; } package cn4; public class ColorTest1 { public static void main(String[] args) { Color red = Color.RED; Color green = Color.GREEN; Color blue = Color.BLUE; System.out.println(red); System.out.println(green); System.out.println(blue); } }
RED
GREEN
BLUE
根据多例模式实现二对应的枚举二
package cn4; public enum Color2 { RED("红"),GREEN("绿"),BLUE("蓝"); private String name; private Color2(String name){ this.name = name; } public String getName(){ return this.name; } } package cn4; public class ColorTest2 { public static void main(String[] args) { Color2 red = Color2.RED; Color2 green = Color2.GREEN; Color2 blue = Color2.BLUE; System.out.println(red); System.out.println(green); System.out.println(blue); System.out.println(red.getName()); System.out.println(green.getName()); System.out.println(blue.getName()); } }
RED
GREEN
BLUE
红
绿
蓝
根据多例模式实现三对应的枚举三
package cn4; public enum Color3 { RED("红"){ @Override public void show() { System.out.println("这是红色"); }},GREEN("绿"){ @Override public void show() { System.out.println("这是绿色"); }},BLUE("蓝"){ @Override public void show() { System.out.println("这是蓝色"); }}; private String name; private Color3(String name){ this.name = name; } public String getName(){ return this.name; } public abstract void show(); }
RED
GREEN
BLUE
红
绿
蓝
这是红色
这是绿色
这是蓝色
二、枚举的注意事项
定义枚举类要用关键字enum。
所有枚举类密度是Enumerate的子类。
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略。
枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”)。
枚举类也可以有抽象方法,但是枚举项必须重写该方法。
枚举可以在switch语句中的使用。
三、枚举类的几个常用方法
int compareTo(E o)
String name()
int ordinal()
String toString()
<T> T valueOf(Class<T> type,String name)
values()
此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
package cn4; public enum Color { RED,GREEN,BLUE; }
package cn4; public class ColorDemo { public static void main(String[] args) { //int compareTo(E o) 比较此枚举与指定对象的顺序 Color red = Color.RED; Color green = Color.GREEN; Color blue = Color.BLUE; System.out.println(red.compareTo(red));//0 System.out.println(red.compareTo(green));//-1 System.out.println(blue.compareTo(red));//2 System.out.println("-------------------------"); //String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。 System.out.println(Color2.RED.name());//RED System.out.println(Color2.GREEN.name());//GREEN System.out.println(Color2.BLUE.name());//BLUE System.out.println("-------------------------"); //int ordinal() 返回枚举常量的序数 System.out.println(Color3.RED.ordinal());//0 System.out.println(Color3.GREEN.ordinal());//1 System.out.println(Color3.BLUE.ordinal());//2 System.out.println("-------------------------"); //String toString() 返回枚举常量的名称 System.out.println(Color3.RED.toString());//RED System.out.println(Color3.GREEN.toString());//GREEN System.out.println(Color3.BLUE.toString());//BLUE System.out.println("-------------------------"); //<T> T valueOf(Class<T> type,String name) 返回带指定名称的指定枚举类型的枚举常量 Color color = Enum.valueOf(Color.class, "RED"); System.out.println(color);//RED System.out.println("-------------------------"); //values() 获取指定枚举类的枚举数组 Color[] colors = Color.values(); for (Color c : colors) { System.out.println(c);//RED GREEN BLUE } } }
0
-1
2
-------------------------
RED
GREEN
BLUE
-------------------------
0
1
2
-------------------------
RED
GREEN
BLUE
-------------------------
RED
-------------------------
RED
GREEN
BLUE
本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1878429
以上是关于java新特性之枚举的主要内容,如果未能解决你的问题,请参考以下文章
java 28 - 4 JDK5的新特性 之 枚举的概述和自定义枚举类
译ECMAScript 2016, 2017, 2018 新特性之必读篇