【背景】
折腾:
【记录】Android中创建进程或线程去实现USB设备插入的状态检测
期间,需要去把一个enum:
public enum usb_action{ USB_ACTION_UNKNOWN, USB_ACTION_ATTACH, USB_ACTION_DETACH, };
转换为int:
Message message=new Message(); message.what=usb_action.USB_ACTION_ATTACH ?????;
【折腾过程】
1.自己去试了试,
int.
Int32.
Convertor.
等等,都没有对应的转换方法。
2.参考:
How to convert enum value to int?
写成:
Message message=new Message(); message.what=usb_action.USB_ACTION_ATTACH.ordinal();
即可。
3.不过后来看到上述办法,不推荐。
所以再去改为:
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.参考:
去试试:
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方法:
usb_action.USB_ACTION_ATTACH.ordinal();
即可。
2.推荐的:
如下写法:
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(); }
然后调用:
Message message=new Message(); message.what=usb_action.USB_ACTION_ATTACH.getAction();
即可。
转载请注明:在路上 » 【已解决】android中enum转换为int