【问题标题】:How to return enum value in java如何在java中返回枚举值
【发布时间】:2015-10-29 05:34:03
【问题描述】:

我怎样才能返回这样的枚举?

在我返回一个 int 之前,如果不是,则为 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;
      }
   }
}

【问题讨论】:

  • 在旁注中,根据java约定,枚举应该以大写字母开头。
  • 枚举是一个(特殊类型的)类,所以你应该将它声明为你的方法的返回类型。顺便说一句,最好把它命名为Decision(它一个类)。

标签: java enums return


【解决方案1】:

我不知道“//扫描仪等”是什么。可以,但是方法返回类型应该是decizion:

    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 声明。
  • 就个人而言,我倾向于避免使用switch 语句,以免破坏Open/Closed principle
  • 这确实是个人意见问题。我只是提到了这种可能性:)
  • 在 JVM 中的 switch 语句被优化为比 if 语句快得多:stackoverflow.com/a/6705977/557153
  • @Konstantin Yovkov 这可能是一个很好的理由,但后来我问自己,为什么退出使用switch 语句的选项?
【解决方案2】:

我认为你应该做这样的事情,一个枚举类。然后你可以添加任意数量的类型,yourDecizion() 方法将根据给定的参数返回枚举类型。

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;
    }
}

【讨论】:

    【解决方案3】:

    将您的代码更改为:

    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 应该有一个大写的名称(所有类都应该)。

    【讨论】:

      【解决方案4】:

      您可以通过以下方式获取值。这里有私有构造函数,它将初始化您要设置的值,当实例方法值被调用时,只需返回 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());
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-10
        • 2019-03-22
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        相关资源
        最近更新 更多