【背景】
折腾:
【记录】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