【背景】
折腾:
期间,需要去把一个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.参考:
写成: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();
即可。