java什么时候用枚举类型,java 为什么枚举能不用最好不要用呢有什么问题吗
大家好,今天来为大家解答java什么时候用枚举类型这个问题的一些问题点,包括java 为什么枚举能不用最好不要用呢有什么问题吗也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
java 为什么枚举能不用最好不要用呢有什么问题吗
在我的理解中我感觉枚举是非常好用的一个东西,而且很方便,还不容易出现错误,不知道你为什么会有这样的疑问呢,举一个例子哈
比如你有一个方法public void method(String type)其中形参type为string类型,可能在你进行业务处理的时候会进行如下的判断
if(type.equals("a"))等等,如果别人在调用你这个方法的时候不小心将a写成了其他的值,这个时侯程序是不会出现错误的,但是你的业务逻辑从此之后受到了影响。
相反,你使用enum的时候,比如public void method(TYPE type)其中形参type是一个enum类型的,在别人使用该方法的时候他只能传进去TYPE下面对应的声明,否则程序就会出现错误,所以我说枚举很方便而且为我们规避了很多问题。
Java语言中的枚举类型如何使用
Java语言中的枚举类型的使用方法如下:
用法一:常量;
publicenumColor{
RED,GREEN,BLANK,YELLOW
}
用法二:switch;
enumSignal{
GREEN,YELLOW,RED
}
publicclassTrafficLight{
Signalcolor=Signal.RED;
publicvoidchange(){
switch(color){
caseRED:
color=Signal.GREEN;
break;
caseYELLOW:
color=Signal.RED;
break;
caseGREEN:
color=Signal.YELLOW;
break;
}
}
}
用法三:向枚举中添加新方法;
publicenumColor{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLO("黄色",4);
//成员变量
privateStringname;
privateintindex;
//构造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//普通方法
publicstaticStringgetName(intindex){
for(Colorc:Color.values()){
if(c.getIndex()==index){
returnc.name;
}
}
returnnull;
}
//getset方法
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetIndex(){
returnindex;
}
publicvoidsetIndex(intindex){
this.index=index;
}
}
用法四:覆盖枚举的方法;
publicclassTest{
publicenumColor{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLO("黄色",4);
//成员变量
privateStringname;
privateintindex;
//构造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//覆盖方法
@Override
publicStringtoString(){
returnthis.index+"_"+this.name;
}
}
publicstaticvoidmain(String[]args){
System.out.println(Color.RED.toString());
}
}
用法五:实现接口;
publicinterfaceBehaviour{
voidprint();
StringgetInfo();
}
publicenumColorimplementsBehaviour{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLO("黄色",4);
//成员变量
privateStringname;
privateintindex;
//构造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//接口方法
@Override
publicStringgetInfo(){
returnthis.name;
}
//接口方法
@Override
publicvoidprint(){
System.out.println(this.index+":"+this.name);
}
}
用法六:使用接口组织枚举。
publicinterfaceFood{
enumCoffeeimplementsFood{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enumDessertimplementsFood{
FRUIT,CAKE,GELATO
}
}
以上就是Java语言中枚举类型的基本使用方法。
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 为什么枚举能不用最好不要用呢有什么问题吗的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。