首页编程java编程java 什么时候用枚举?java 为什么枚举能不用最好不要用呢有什么问题吗

java 什么时候用枚举?java 为什么枚举能不用最好不要用呢有什么问题吗

编程之家2023-10-11111次浏览

大家好,今天来为大家分享java 什么时候用枚举的一些知识点,和java 为什么枚举能不用最好不要用呢有什么问题吗的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

java 什么时候用枚举?java 为什么枚举能不用最好不要用呢有什么问题吗

java枚举的几种用法

用法一:常量

在JDK1.5之前,我们定义常量都是: public static fianl....。现在好了,

有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

java 什么时候用枚举?java 为什么枚举能不用最好不要用呢有什么问题吗

Java代码

public enum Color{

RED, GREEN, BLANK, YELLOW

java 什么时候用枚举?java 为什么枚举能不用最好不要用呢有什么问题吗

}

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

Java代码

enum Signal{

GREEN, YELLOW, RED

}

public class TrafficLight{

Signal color= Signal.RED;

public void change(){

switch(color){

case RED:

color= Signal.GREEN;

break;

case YELLOW:

color= Signal.RED;

break;

case GREEN:

color= Signal.YELLOW;

break;

}

}

}

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java要求必须先定义 enum实例。

Java代码

public enum Color{

RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

//成员变量

private String name;

private int index;

//构造方法

private Color(String name, int index){

this.name= name;

this.index= index;

}

//普通方法

public static String getName(int index){

for(Color c: Color.values()){

if(c.getIndex()== index){

return c.name;

}

}

return null;

}

// get set方法

public String getName(){

return name;

}

public void setName(String name){

this.name= name;

}

public int getIndex(){

return index;

}

public void setIndex(int index){

this.index= index;

}

}

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。

Java代码

public enum Color{

RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

//成员变量

private String name;

private int index;

//构造方法

private Color(String name, int index){

this.name= name;

this.index= index;

}

//覆盖方法

@Override

public String toString(){

return this.index+"_"+this.name;

}

}

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类。

Java代码

public interface Behaviour{

void print();

String getInfo();

}

public enum Color implements Behaviour{

RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

//成员变量

private String name;

private int index;

//构造方法

private Color(String name, int index){

this.name= name;

this.index= index;

}

//接口方法

@Override

public String getInfo(){

return this.name;

}

//接口方法

@Override

public void print(){

System.out.println(this.index+":"+this.name);

}

}

用法六:使用接口组织枚举

Java代码

public interface Food{

enum Coffee implements Food{

BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO

}

enum Dessert implements Food{

FRUIT, CAKE, GELATO

}

}

private static void testImplementsInterface(){

for(Food.DessertEnum dessertEnum: Food.DessertEnum.values()){

System.out.print(dessertEnum+"");

}

System.out.println();

//我这地方这么写,是因为我在自己测试的时候,把这个coffee单独到一个文件去实现那个food接口,而不是在那个接口的内部。

for(CoffeeEnum coffee: CoffeeEnum.values()){

System.out.print(coffee+"");

}

System.out.println();

//搞个实现接口,来组织枚举,简单讲,就是分类吧。如果大量使用枚举的话,这么干,在写代码的时候,就很方便调用啦。

//还有就是个“多态”的功能吧,

Food food= Food.DessertEnum.CAKE;

System.out.println(food);

food= CoffeeEnum.BLACK_COFFEE;

System.out.println(food);

}

介绍一下java枚举,顺便举个例子,谢谢

package com.ljq.test;

/**

*枚举用法详解

*

*@author jiqinlin

*

*/

public class TestEnum{

/**

*普通枚举

*

*@author jiqinlin

*

*/

public enum ColorEnum{

red, green, yellow, blue;

}

/**

*枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法

*

*@author jiqinlin

*

*/

public enum SeasonEnum{

//注:枚举写在最前面,否则编译出错

spring, summer, autumn, winter;

private final static String position="test";

public static SeasonEnum getSeason(){

if("test".equals(position))

return spring;

else

return winter;

}

}

/**

*性别

*

*实现带有构造器的枚举

*

*@author jiqinlin

*

*/

public enum Gender{

//通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错

//赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错

MAN("MAN"), WOMEN("WOMEN");

private final String value;

//构造器默认也只能是private,从而保证构造函数只能在内部使用

Gender(String value){

this.value= value;

}

public String getValue(){

return value;

}

}

/**

*订单状态

*

*实现带有抽象方法的枚举

*

*@author jiqinlin

*

*/

public enum OrderState{

/**已取消*/

CANCEL{public String getName(){return"已取消";}},

/**待审核*/

WAITCONFIRM{public String getName(){return"待审核";}},

/**等待付款*/

WAITPAYMENT{public String getName(){return"等待付款";}},

/**正在配货*/

ADMEASUREPRODUCT{public String getName(){return"正在配货";}},

/**等待发货*/

WAITDELIVER{public String getName(){return"等待发货";}},

/**已发货*/

DELIVERED{public String getName(){return"已发货";}},

/**已收货*/

RECEIVED{public String getName(){return"已收货";}};

public abstract String getName();

}

public static void main(String[] args){

//枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值

ColorEnum colorEnum= ColorEnum.blue;

switch(colorEnum){

case red:

System.out.println("color is red");

break;

case green:

System.out.println("color is green");

break;

case yellow:

System.out.println("color is yellow");

break;

case blue:

System.out.println("color is blue");

break;

}

//遍历枚举

System.out.println("遍历ColorEnum枚举中的值");

for(ColorEnum color: ColorEnum.values()){

System.out.println(color);

}

//获取枚举的个数

System.out.println("ColorEnum枚举中的值有"+ColorEnum.values().length+"个");

//获取枚举的索引位置,默认从0开始

System.out.println(ColorEnum.red.ordinal());//0

System.out.println(ColorEnum.green.ordinal());//1

System.out.println(ColorEnum.yellow.ordinal());//2

System.out.println(ColorEnum.blue.ordinal());//3

//枚举默认实现了java.lang.Comparable接口

System.out.println(ColorEnum.red.compareTo(ColorEnum.green));//-1

//--------------------------

System.out.println("===========");

System.err.println("季节为"+ SeasonEnum.getSeason());

//--------------

System.out.println("===========");

for(Gender gender: Gender.values()){

System.out.println(gender.value);

}

//--------------

System.out.println("===========");

for(OrderState order: OrderState.values()){

System.out.println(order.getName());

}

}

}

java 为什么枚举能不用最好不要用呢有什么问题吗

在我的理解中我感觉枚举是非常好用的一个东西,而且很方便,还不容易出现错误,不知道你为什么会有这样的疑问呢,举一个例子哈

比如你有一个方法public void method(String type)其中形参type为string类型,可能在你进行业务处理的时候会进行如下的判断

if(type.equals("a"))等等,如果别人在调用你这个方法的时候不小心将a写成了其他的值,这个时侯程序是不会出现错误的,但是你的业务逻辑从此之后受到了影响。

相反,你使用enum的时候,比如public void method(TYPE type)其中形参type是一个enum类型的,在别人使用该方法的时候他只能传进去TYPE下面对应的声明,否则程序就会出现错误,所以我说枚举很方便而且为我们规避了很多问题。

好了,文章到这里就结束啦,如果本次分享的java 什么时候用枚举和java 为什么枚举能不用最好不要用呢有什么问题吗问题对您有所帮助,还望关注下本站哦!

java单例模式有什么用?在java中用单例模式有什么好处java具有什么特点是什么意思(Java三大特点是什么啊)