I've looked at various Q&As on SO similar to this question but haven't found a solution.
What I have is an enum which represents different ways to view a TV Guide...
In the NDroid Application
class
static enum guideView { GUIDE_VIEW_SEVEN_DAY, GUIDE_VIEW_NOW_SHOWING, GUIDE_VIEW_ALL_TIMESLOTS }
...when the user changes the view an event handler receives an int
from 0-2 and I'd like to do something like this...
In an Android Activity
onClick(DialogInterface dialog, int which)
event handler
// 'which' is an int from 0-2 switch (which) { case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY: ... break; }
I'm used to C# enums and select/case statements which would allow something like the above and I know Java does things differently but I just can't make sense of what I need to do.
Am I going to have to resort to if
statements? There will likely only ever be 3 choices so I could do it but I wondered how it could be done with switch-case in Java.
EDIT Sorry I didn't completely expand on the issue as I was looking at it as being a generic Java issue. I've added to the question to explain a bit further.
There isn't anything that's Android specific which is why I didn't tag it as Android but the enum is defined in the Application
class and the code where I wan't the switch is in an Activity
. The enum is static as I need to access it from multiple Activities.
We can use also use Enum keyword with Switch statement. We can use Enum in Switch case statement in Java like int primitive.
You definitely can switch on enums.
Can enum be checked in a switch-case statement? Yes. Enum can be checked. As an integer value is used in enum.
You can throw unchecked exceptions from an enum constructor.
The part you're missing is converting from the integer to the type-safe enum. Java will not do it automatically. There's a couple of ways you can go about this:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Determine the enum value represented by the int value and then switch on the enum value.
enum GuideView { SEVEN_DAY, NOW_SHOWING, ALL_TIMESLOTS } // Working on the assumption that your int value is // the ordinal value of the items in your enum public void onClick(DialogInterface dialog, int which) { // do your own bounds checking GuideView whichView = GuideView.values()[which]; switch (whichView) { case SEVEN_DAY: ... break; case NOW_SHOWING: ... break; } }
You may find it more helpful / less error prone to write a custom valueOf
implementation that takes your integer values as an argument to resolve the appropriate enum value and lets you centralize your bounds checking.
If whichView
is an object of the GuideView Enum, following works well. Please note that there is no qualifier for the constant after case
.
switch (whichView) { case SEVEN_DAY: ... break; case NOW_SHOWING: ... break; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With