标签: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);
}
}cn4.MultiInstance@15db9742
cn4.MultiInstance@6d06d69c
cn4.MultiInstance@7852e922
cn4.MultiInstance@4e25154f
多例模式实现方式二
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());
}
}cn4.MultiInstance2@15db9742
cn4.MultiInstance2@6d06d69c
cn4.MultiInstance2@7852e922
cn4.MultiInstance2@4e25154f
前
后
左
右
多例模式实现方式三
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();
}
}cn4.MultiInstance3$1@15db9742
cn4.MultiInstance3$2@6d06d69c
cn4.MultiInstance3$3@7852e922
cn4.MultiInstance3$4@4e25154f
前
后
左
右
这是前面哦
这是后面哦
左这是边哦
这是后边哦
但是如果我们写多例模式也这样实在是太麻烦了。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新特性之枚举
原文地址:http://11841428.blog.51cto.com/11831428/1878429