如何在Java中返回枚举值

15

我应该如何返回这样的枚举?

以前我返回一个整数,如果不是则为0,如果是则为1,如果是其他则为2。但这不是好的做法。应该如何处理?我的代码:

class SomeClass{
   public enum decizion{
      YES, NO, OTHER
   }

   public static enum yourDecizion(){
      //scanner etc
      if(x.equals('Y')){
         return YES;
      }
      else if (x.equals('N')){
         return NO;
      }
      else{
         return OTHER;
      }
   }
}

2
顺便提一下,按照Java规范,枚举应该以大写字母开头。 - Dragondraikk
1
枚举是一种特殊类型的类,因此您应该将其声明为方法的返回类型。顺便说一下,最好将其命名为“Decision”(它确实是一个类)。 - Chop
4个回答

17

我不知道 "//scanner etc." 是什么意思,但是这些方法的返回类型应该是 decision

    public static decizion yourDecizion() { ... }

此外,您可以将YN等值添加到枚举常量中:
    public enum decizion{
         YES("Y"), NO("N"), OTHER;
          
         String key;
      
         decizion(String key) { this.key = key; }
     
         //default constructor, used only for the OTHER case, 
         //because OTHER doesn't need a key to be associated with. 
         decizion() { }

         static decizion getValue(String x) {
             if ("Y".equals(x)) { return YES; }
             else if ("N".equals(x)) { return NO; }
             else if (x == null) { return OTHER; }
             else throw new IllegalArgumentException();
         }
    }

然后,在方法中,您只需执行以下操作:
    public static decizion yourDecizion() {
        ...
       String key = ...
       return decizion.getValue(key);
    }

另外,你也可以使用 switch 语句。 - Xr.
个人而言,我倾向于避免使用 switch 语句,以避免违反开闭原则 - Konstantin Yovkov
这确实是个人观点的问题。我只是提到了可能性 :) - Xr.
在JVM中,switch语句被优化为比if语句更快:https://dev59.com/SGw15IYBdhLWcg3wT51c#6705977 - avgvstvs
@KonstantinYovkov switch语句如何破坏开闭原则? - Alexandru Severin
显示剩余4条评论

5

我认为你可以像这样做,使用枚举类。这样你就能添加任意多的类型,并且yourDecision()方法会根据给定的参数返回相应的枚举类型。

public enum SomeClass {

        YES(0),
        NO(1),
        OTHER(2);

    private int code;


    private SomeClass(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }

    public static SomeClass yourDecizion(int x) {
        SomeClass ret = null;
        for (SomeClass type : SomeClass.values()) {
            if (type.getCode() == x)
                ret = type;
        }
        return ret;
    }
}

1
您可以通过以下方式获取值。这里有一个私有构造函数,它将初始化您想要设置的值,当实例方法值被调用时,只需返回this.key即可。
public class Application {
    enum Day {
        MONDAY("Monday"), TUESDAY("Tuesday");

        String key;

        Day(String str) {
            key = str;
        }

        public String value() {
            return this.key;
        }
    }

    public static void main(String[] args) {
        System.out.println(Day.MONDAY.value());
    }

}

1

Change your code to:

class SomeClass{
   public enum decizion {
      YES, NO, OTHER
   }

   public static decizion yourDecizion(){
      //scanner etc
      if(x.equals('Y')){
         return decizion.YES;
      }
      else if (x.equals('N')){
         return decizion.NO;
      }
      else{
         return decizion.OTHER;
      }
   }
}

注意:方法的返回类型必须是decizion而不是enum,并且decizion应该有一个大写的名称(因为所有类都应该如此)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接