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

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

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

大家好,感谢邀请,今天来为大家分享一下java什么时候用枚举的问题,以及和java 为什么枚举能不用最好不要用呢有什么问题吗的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

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

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

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

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

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

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

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

java枚举的几种用法

用法一:常量

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

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

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

Java代码

public enum Color{

RED, GREEN, BLANK, YELLOW

}

用法二: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 的枚举可以用泛型吗

有!

泛型和枚举都是JDK1.5版本之后加入的新特性,泛型将程序代码的类型检查提前到了编译期间进行,枚举类型增强了程序代码的健壮性。

1.泛型

在JDK1.5版本之前,如果在集合中添加了不同类型的数据,需要在程序的运行期间对类型之间的转换进行检查。

例如:

List arrayList=new arrayList();

在arrayList中添加String类型的对象和Integer对象,但是我们定义如下一个数组

String[] values=new String[arrayList.size()];

如果想要把arrayList转换成数组的话就会出现错误:

arrayList.toArray(values);//运行期间错误

这是因为List中包含了整型封装类型的对象。但是该错误只能在运行期间才能发现,程序能够正常的通过编译,并不会报错。

对于程序中出现的错误,应该尽早的通知程序员。泛型能够很好地解决这个问题。

1.1泛型在集合中的应用

在JDK1.5版本之后Java提供了对泛型的支持。例如对于一个ArrayList列表来说,如果只想在列表中放入String类型元素,可以用下面的方法来实现:

ArrayList<String> list=new ArrayList<String>();

泛型使得编译器能够在编译期间对集合中加入的对象进行检查,如果加入了不同类型的对象,就会报错,而不必等到运行期间再进行相关的类型转换。

和原来没有使用泛型相比,它将原来需要在运行时期才能发现的异常提前到了编译期间,使得程序的安全性也大大提高,泛型一般用于集合类中。

1.2泛型类和泛型方法

泛型类的定义如下:在类名的后面加上一对尖括号("<>"),在尖括号内部填入需要的类型。例如:

class Point< T>{//此处可以随便写标识符号,T是type的简称

private T var;// var的类型由T指定,即:由外部指定

public T getVar(){//返回值的类型由外部决定,泛型方法

return var;

}

public void setVar(T var){//设置的类型也由外部决定

this.var= var;

}

};

public class GenericsDemo06{

public static void main(String args[]){

Point< String> p= new Point< String>();//里面的var类型为String类型

p.setVar("it");//设置字符串

System.out.println(p.getVar().length());//取得字符串的长度

}

}; 2.枚举

枚举也是JDK1.5之后的版本以后Java新加入的特性。使用枚举可以表示一组常量数据。枚举的本质是一个类,可以使用enum关键字来声明一个枚举类型,其声明方式如下:

[访问控制符] enum枚举类型名{value1,value2,......}

使用枚举类型需要注意以下几点:

枚举类型可以定义在类的内部也可以定义在类的外部。如果定义在类的内部,那么其访问控制符可以是public,protected,private或者默认的控制符。如果定义在类的外部,其访问控制符只能是public和默认控制符;

枚举类型中定义的value值都默认为public static final的。其值一经定义就不能在被修改了。多个value值之间需要用逗号隔开;

枚举类型中除了可以声明常量之外还可以声明方法。但是方法需要在常量之后,并且常量和方法之间要用分号区分;

枚举类型中的值可以通过枚举类型名直接对他们进行访问;

枚举类型不能声明为abstract或者final类型;

例:

public enum Direction{

FORWARD,

BACK,

LEFT;

public void start(){

System.out.println("enum method");

}

}

2.1枚举类型的常用方法

public final String name()//返回枚举常量的名称;

public final int ordinal()//返回枚举常量在枚举类型中的位置,第一个枚举值序号为0,依次类推;

public String toString()//返回枚举常量的名字,可以重写此方法;

public static valueOf(enumType,String name)//返回与name名字相对应的枚举常量;

关于java什么时候用枚举到此分享完毕,希望能帮助到您。

java什么时候用抽象类 在java中,谁知道什么时候应该用抽象类java中default什么意思,C语言中的default是什么意思,怎么用