当前位置:首页 > 芯闻号 > 充电吧
[导读]在 C/C++ 环境下,已经习惯使用枚举型常量,但在 Android 下使用时发现枚举与 C/C++ 下是完全不同的。Android 下,枚举其实是类。使用感觉困难,主要是枚举与 int 之间的转换。

在 C/C++ 环境下,已经习惯使用枚举型常量,但在 Android 下使用时发现枚举与 C/C++ 下是完全不同的。

Android 下,枚举其实是类。
使用感觉困难,主要是枚举与 int 之间的转换。如果枚举的定义如下 weekday 所示,还可以通过 ordinal() 和 values()[] 方法进行转换。
但不幸的是,我使用的是如下 weekday_2 所示的枚举类型,我是没有找到对应的转换方法。
最后没有办法,将枚举修改为一般的常量定义,如下:

public static final short MAX_BUFFER_SIZE = 2048;


public class Test {
	public enum weekday
	{
	    sun,
	    mou,
	    tue,
	    thu,
	    fri,
	    sat,
	    wed,
	};
	
	public enum weekday_2
	{
	    sun(0x1),
	    mou(0x2),
	    tue(0x3),
	    thu(0x4),
	    fri(0x5),
	    sat(0x6),
	    wed(0x7),
	    large(0x99);		// 如果增加此值,通过 ordinal() 方法得到的值是多少?
	
	    private int iSet;
	    weekday_2(int iValue) {
	        this.iSet = iValue;
	    }
	
	    public int Get() {
	        return this.iSet;
	    }
	};
}



对于上面两个枚举定义 weekday 和 weekday_2:

int x = weekday.sun.ordinal();
weekday sun = weekday.values()[x];


int x = weekday_2.sun.ordinal();
weekday_2 sun = weekday_2.values()[x];

有什么差别?除了 weekday_2 中的 large 成员外,其它成员的值是否相同?

void TestEnumValue() {
	TstEnum.weekday day = TstEnum.weekday.sun;
	TstEnum.weekday_2 day2 = TstEnum.weekday_2.sun;
	TstEnum.weekday_2 day2_large = TstEnum.weekday_2.large;
	
	int iDay = day.ordinal();
	int iDay2 = day2.ordinal();
	int iDay2Large = day2_large.ordinal();


    System.out.println("Enum Test" + "value of sun : " + Integer.toString(iDay) + "/" + Integer.toString(iDay2)
    		+ ". Large: " + Integer.toString(iDay2Large));
}


执行后输出的结果是: Enum Testvalue of sun : 0/0. Large: 7
weekday_2 的成员 sun 并未输出其真实的数值,而是输出了下标。
对应之,weekday.values()[x]; 也是下标。若知道 weekday_2 的一个变量值是: 整型 0x99, 想转成对应的枚举。如果使用 weekday.values()[0x99] 则会直接越界。


(1)  执行:javac Test.java
编译没有出错即可。


(2) 执行: javap Test
得到以下的输出:

Compiled from "Test.java"
public class Test {
  int x;
  Test$weekday sun;
  public Test();
}


(3) 执行: javap Test$weekday
得到以下输出:

Compiled from "Test.java"
public final class Test$weekday extends java.lang.Enum{
  public static final Test$weekday sun;
  public static final Test$weekday mou;
  public static final Test$weekday tue;
  public static final Test$weekday thu;
  public static final Test$weekday fri;
  public static final Test$weekday sat;
  public static final Test$weekday wed;
  public static Test$weekday[] values();
  public static Test$weekday valueOf(java.lang.String);
  static {};
}


(4) 执行: javap Test$weekday_2
得到以下输出:

Compiled from "Test.java"
public final class Test$weekday_2 extends java.lang.Enum{
  public static final Test$weekday_2 sun;
  public static final Test$weekday_2 mou;
  public static final Test$weekday_2 tue;
  public static final Test$weekday_2 thu;
  public static final Test$weekday_2 fri;
  public static final Test$weekday_2 sat;
  public static final Test$weekday_2 wed;
  public static Test$weekday_2[] values();
  public static Test$weekday_2 valueOf(java.lang.String);
  public int Get();
  static {};
}


从以上反编译出来的代码可以得出以下结论: 
(1) weekday 和 weekday_2 枚举类是final class,即不能被继承,而它本身是继承于 Enum
(2) 枚举值是 weekday 或 weekday_2 对象,而且是 static final 修饰的

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭