www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > > 充電吧
[導(dǎo)讀]在 C/C++ 環(huán)境下,已經(jīng)習慣使用枚舉型常量,但在 Android 下使用時發(fā)現(xiàn)枚舉與 C/C++ 下是完全不同的。Android 下,枚舉其實是類。使用感覺困難,主要是枚舉與 int 之間的轉(zhuǎn)換。

在 C/C++ 環(huán)境下,已經(jīng)習慣使用枚舉型常量,但在 Android 下使用時發(fā)現(xiàn)枚舉與 C/C++ 下是完全不同的。

Android 下,枚舉其實是類。
使用感覺困難,主要是枚舉與 int 之間的轉(zhuǎn)換。如果枚舉的定義如下 weekday 所示,還可以通過 ordinal() 和 values()[] 方法進行轉(zhuǎn)換。
但不幸的是,我使用的是如下 weekday_2 所示的枚舉類型,我是沒有找到對應(yīng)的轉(zhuǎn)換方法。
最后沒有辦法,將枚舉修改為一般的常量定義,如下:

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));
}



執(zhí)行后輸出的結(jié)果是: Enum Testvalue of sun : 0/0. Large: 7
weekday_2 的成員 sun 并未輸出其真實的數(shù)值,而是輸出了下標。
對應(yīng)之,weekday.values()[x]; 也是下標。若知道 weekday_2 的一個變量值是: 整型 0x99, 想轉(zhuǎn)成對應(yīng)的枚舉。如果使用 weekday.values()[0x99] 則會直接越界。


(1) ?執(zhí)行:javac Test.java
編譯沒有出錯即可。


(2) 執(zhí)行: javap Test
得到以下的輸出:

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



(3) 執(zhí)行: 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) 執(zhí)行: 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?{};
}



從以上反編譯出來的代碼可以得出以下結(jié)論:?
(1) weekday 和 weekday_2 枚舉類是final class,即不能被繼承,而它本身是繼承于 Enum
(2) 枚舉值是 weekday 或 weekday_2 對象,而且是 static final 修飾的

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

其他電腦(比如安卓手機/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問一些東西。你可以使用android的USB OTG功能(是的,幾乎每個android都支持這個功能,你可以將鼠標和鍵盤連接到它)。

關(guān)鍵字: USB 鼠標 Android 樹莓派

Google 宣布與中國 AR 科技公司 XREAL 達成深度戰(zhàn)略合作,聯(lián)合推出全球首款專為 Android XR 平臺打造的旗艦級 AR 眼鏡 Project Aura。

關(guān)鍵字: Google XREAL Android XR眼鏡 AR

繼停止維護AOSP開源項目后,谷歌母公司Alphabet近日被曝在其安卓系統(tǒng)(Android)、Pixel手機以及Chrome瀏覽器等部門裁員數(shù)百人。這一舉措引發(fā)了業(yè)界的廣泛關(guān)注,也引發(fā)了對谷歌未來業(yè)務(wù)布局的諸多猜測。

關(guān)鍵字: 谷歌 AOSP Android 裁員

在本教程中,我們將使用Capacitor 6、Angular和TypeScript構(gòu)建一個Android應(yīng)用程序,該應(yīng)用程序通過串行端口連接到BleuIO USB加密狗。該應(yīng)用程序允許用戶直接從Android設(shè)備發(fā)送和接...

關(guān)鍵字: Android USB 電容器 BLE設(shè)備

早前媒體報道谷歌將停止維護Android開源項目(AOSP),將Android開發(fā)全面轉(zhuǎn)向內(nèi)部閉源分支,目前這一消息已經(jīng)得到谷歌官方確認。

關(guān)鍵字: 谷歌 Android 開源

本項目演示了如何通過OTG (on - go) USB在Android設(shè)備上使用BleuIO USB加密狗作為串行端口。使用電容器6和@adeunis/電容器-串行插件,我們建立串行連接,發(fā)送AT命令,并實時讀取響應(yīng)。該...

關(guān)鍵字: 電容器 Android 傳感器 微控制器 嵌入式系統(tǒng)

在Linux操作系統(tǒng)中,Android Debug Bridge(ADB)是一個功能強大的命令行工具,它允許開發(fā)者在計算機和Android設(shè)備之間建立通信,從而進行調(diào)試、管理、安裝應(yīng)用等操作。本文將詳細介紹在Linux系...

關(guān)鍵字: Linux系統(tǒng) Android Debug ADB

隨著Android操作系統(tǒng)的進步,智能手機的使用日益增加。隨后,有報道稱,惡意個人和黑客利用 Android 提供的漏洞來訪問用戶珍視的數(shù)據(jù)。例如,此類威脅包括 2021 年針對 Android 設(shè)備發(fā)布的 Flubot...

關(guān)鍵字: Android 惡意軟件

在本教程中,我們將構(gòu)建超出電子領(lǐng)域的東西。作為一名電子工程師,我們大多數(shù)人都想為我們的物聯(lián)網(wǎng)應(yīng)用程序構(gòu)建一些用戶界面,在大多數(shù)情況下,Android應(yīng)用程序?qū)⑹怯脩襞c我們的物聯(lián)網(wǎng)設(shè)備交互的正確選擇。所以,如果你想為你的物...

關(guān)鍵字: 物聯(lián)網(wǎng) Android
關(guān)閉