【背景】
折腾:
【记录】Android中创建进程或线程去实现USB设备插入的状态检测
期间,需要去把一个enum:
1 2 3 4 5 | public enum usb_action{ USB_ACTION_UNKNOWN, USB_ACTION_ATTACH, USB_ACTION_DETACH, }; |
转换为int:
1 2 | Message message= new Message(); message.what=usb_action.USB_ACTION_ATTACH ?????; |
【折腾过程】
1.自己去试了试,
int.
Int32.
Convertor.
等等,都没有对应的转换方法。
2.参考:
How to convert enum value to int?
写成:
1 2 | Message message= new Message(); message.what=usb_action.USB_ACTION_ATTACH.ordinal(); |
即可。
3.不过后来看到上述办法,不推荐。
所以再去改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public enum usb_action{ USB_ACTION_UNKNOWN( 0 ), USB_ACTION_ATTACH( 1 ), USB_ACTION_DETACH( 2 ); private final int action; private void Action( int action) { this .action = action; } public int getAction() { return action; } } public int getCurrentAction() { usb_action curUsbAction = usb_action.USB_ACTION_ATTACH; return curUsbAction.getAction(); } |
但是却竟然出错:
The constructor DeviceListActivity.usb_action(int) is undefined |
如图:
很是奇怪。。。
4.参考:
去试试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public enum usb_action{ USB_ACTION_UNKNOWN( 0 ), USB_ACTION_ATTACH( 1 ), USB_ACTION_DETACH( 2 ); usb_action ( int action) { this .action = action; } private final int action; public int getAction() { return action; } } public int getCurrentAction() { usb_action curUsbAction = usb_action.USB_ACTION_ATTACH; return curUsbAction.getAction(); } |
即可。
【总结】
其实是java中,将enum转为init,办法是:
1.不太推荐的:
直接用enum的值,调用其ordinal方法:
1 | usb_action.USB_ACTION_ATTACH.ordinal(); |
即可。
2.推荐的:
如下写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public enum usb_action{ USB_ACTION_UNKNOWN( 0 ), USB_ACTION_ATTACH( 1 ), USB_ACTION_DETACH( 2 ); usb_action ( int action) { this .action = action; } private final int action; public int getAction() { return action; } } public int getCurrentAction() { usb_action curUsbAction = usb_action.USB_ACTION_ATTACH; return curUsbAction.getAction(); } |
然后调用:
1 2 | Message message= new Message(); message.what=usb_action.USB_ACTION_ATTACH.getAction(); |
即可。
转载请注明:在路上 » 【已解决】android中enum转换为int