我必须为所有Switch案例定义ENUM。我不确定如何将enums与职位联系起来。以下是我的代码:
public enum Choice {
A, B, C
}
public void selectItem(int position) {
switch (position) {
// Dashboard
case 0:
break;
case 1:
break;
}
}
答案 0 :(得分:5)
请改为直接在开关
中使用枚举public void selectItem(Choice x) {
switch (x) {
// Dashboard
case A:
break;
case B:
break;
}
}
答案 1 :(得分:3)
一般来说,这是个坏主意。但是,要将序数转换为enum represantation,您可能希望这样做:
Choice value = Choice.values()[position];
下面你可以从 Item 31: Use instance fields instead of ordinals (Effective Java,第158页,Joshua Bloch)中找到剪辑,其中描述了如何避免使用序数。
永远不要从序数中获取与枚举相关的值;商店 它在实例字段中改为
// Abuse of ordinal to derive an associated value - DON'T DO THIS public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusicians() { return ordinal() + 1; } } public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8), NONET(9), DECTET(10), TRIPLE_QUARTET(12); private final int numberOfMusicians; Ensemble(int size) { this.numberOfMusicians = size; } public int numberOfMusicians() { return numberOfMusicians; } }
答案 2 :(得分:2)
public enum Choice {
A, B, C
}
public Choice selectItem(int position) {
return Choice.values()[position];
}
答案 3 :(得分:2)
您可以尝试在枚举中添加一些方法来包含逻辑。
public enum Choice {
A, B, C;
static Choice[] values = Choice.values(); //so array not created defined every time.
public static Choice fromOrdinal(int position){
if(position<values.length){
return values[position];
}
return A; //default
}
}
//例如,当在android中选择一个微调器时,它返回一个int位置。
//将此位置映射到枚举,您可以调用fromOrdinal()方法,如下所示。
public void selectItem(int position) {
switch (Choice.fromOrdinal(position)) {
// Dashboard
case A:
break;
case B:
break;
...// the rest of your cases.
}
}
答案 4 :(得分:1)
您需要将int位置转换为相应的ENUM。默认情况下,每个枚举值都有一个序数。在选择枚举中,A有零序等等。
public class TestMain {
public enum Choice {
A, B, C
}
public static void main(String[] args) {
selectItem(0);
}
public static void selectItem(int position) {
Choice selectedChoice = null;
selectedChoice = getChoiceFromPosition(position, selectedChoice);
switch (selectedChoice) {
//Dashboard
case A:
System.out.println(selectedChoice.ordinal());
break;
case B:
break;
case C:
break;
}
}
private static Choice getChoiceFromPosition(int position, Choice selectedChoice) {
for(Choice c : Choice.values()){
if(c.ordinal() == position) {
selectedChoice =c;
}
}
return selectedChoice;
}
}
答案 5 :(得分:0)
这里有很多好的答案。只需添加一个非常优雅且值得考虑的内容。
您可以让enum
完成所有工作。
interface Selectable {
public void selected();
}
public enum Choice implements Selectable {
A {
@Override
public void selected() {
System.out.println("We're all going to die!!!");
}
}, B{
@Override
public void selected() {
System.out.println("Everyone lives forever");
}
}, C{
@Override
public void selected() {
System.out.println("Nobody knows.");
}
};
}
这实际上完全消除了对switch ... case
语句的需要。