枚举在Java与。net中的区别是什么

  介绍

这篇文章给大家介绍枚举在Java与。net中的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

public  enum  EItemDataType    {   真正的才能=1,   ,服务=2   以前,}

但java中并不能如此潇洒的书写枚举,可能需要类似这样写:

public  enum  EItemDataType  {   真正的才能(1),服务(2);   private 才能;int 价值;   ,,   private 才能EItemDataType (int 价值),{   ,,,this.value =,价值;   ,,}   ,   public 才能;int  getValue (), {   ,,,return 价值;   ,,}   public 才能;static  EItemDataType 返回对象的值(int 价值),{,,   ,,,switch (值),{   ,,,case  1:   ,,,,,return  EItemDataType.Real;   ,,,case  2:   ,,,,,return  EItemDataType.Service;   ,,   ,,,默认值:   ,,,,,return 零;   ,,,}   ,,}   ,,,,,      }

发现。net要比java简单的多,注意几个方法:

返回对象的值的方法:看作用是为了根据一个枚举的数值来得到枚举,这个功能很常见,但在. net中就不需要这样麻烦了,可以直接将数据强转成枚举,比如:

<代码> var itemType=(EItemDataType) 1;

getValue的方式,明显是需要将一个枚举转换成它所对应的值,. net中也不需要调用方法来取的值,也可以强转,比如:

<代码> var itemTypeValue=https://www.yisu.com/zixun/(int) EItemDataType.Real;

私有构造函数,我们可以传多少参数,比如常见的我们需要显示这个枚举值对应的中文描述,在java中我们只需要在构造函数中增加一个名字参数就可以了,但在. net中因为没有这货不能这样做,但可以通过Atrribute来完成。

public  enum  EItemDataType    {   (才能描述(“实物“))   真正的才能=1,   (才能描述(“服务“))   ,服务=2   以前,}

习惯性观点二:因为。net的枚举是个值类型,所以我理所当然的会认为java的枚举也是一个值类型。之前对。net的理解就是将一些数值以更加可读性的方式体现在程序中,比如订单状态,订单类型等等,比如:

//枚举值可读性更强   如果(orderInfo.orderStatus.equals (EOrderStatus.Shipped)) {//do 才能   }//一般不这样写0可读性不强   如果(orderInfo.orderStatus==0) {//do 才能   }

枚举类型的自说明:

编译后的文件中找到了EItemDataType。这类个文件,这说明java的枚举其实和普通的类是一样的,既然是一个类,那么肯定不是值类型了,下图中的引用类型中包含类类型。

编译之后所对应的字节码到底是什么样的:

public  final  class  EItemDataType  extends  java.lang.Enum, {   ,public  static  final  EItemDataType 真实;      ,public  static  final  EItemDataType 服务;      ,static , {};   代码:才能   ,,,0:,new ,,,,, 1,,,,,,,,,//class  EItemDataType   ,,,3:打开   ,,,4:,ldc ,,,,, # 15,,,,,,,,,//, String 真实的   ,,,6:iconst_0   ,,,7:iconst_1   ,,,8:,invokespecial  # 16,,,,,,,,,//, Method “& lt; init>“: (Ljava/lang/String; II) V   ,,,11:putstatic ,, # 20,,,,,,,,,//, Field 真实:LEItemDataType;   ,,,14:new ,,,,, 1,,,,,,,,,//class  EItemDataType   ,,17:复制品   ,,,18:ldc ,,,,, # 22,,,,,,,,,//String 服务   ,,20:iconst_1   ,,21:iconst_2   ,,,22:invokespecial  # 16,,,,,,,,,//, Method “& lt; init>“: (Ljava/lang/String; II) V   ,,,25日:putstatic ,, # 23,,,,,,,,,//, Field 服务:LEItemDataType;   ,,28:iconst_2   ,,,29:anewarray ,, # 1,,,,,,,,,//class  EItemDataType   ,,32:复制品   ,,33:iconst_0   ,,,34:getstatic ,, # 20,,,,,,,,,//, Field 真实:LEItemDataType;   ,,37:aastore   ,,38:复制品   ,,39:iconst_1   ,,,40:getstatic ,, # 23,,,,,,,,,//, Field 服务:LEItemDataType;   ,,43:aastore   ,,,44:putstatic ,, 25号,,,,,,,,,//,Field 枚举值:美元[LEItemDataType;   ,,47:返回      ,public  int  getValue ();   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

枚举在Java与。net中的区别是什么