有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java返回枚举值,但类位于类的数组中

我得到了一个等级,我需要返回一个等级数组,里面包含枚举的所有值,我无法实现这一点

public class Rating implements java.io.Serializable {

    /**
     * 
     */
    private static Rating [] rates;
    private enum Rates{
        Very_Bad,
        Bad,
        Mediocre,
        Good,
        Very_Good,  
        Excellent;      
    }

    public static Rating[] values() {
        // TODO Auto-generated method stub


        rates = new Rating[Rates.values().length];
        rates[0] = Rates.Very_Bad;    //Type mismatch: cannot convert from Rating.Rates to Rating
        rates[1] = Rates.Bad;         //Type mismatch: cannot convert from Rating.Rates to Rating
        rates[2] = Rates.Mediocre;    //Type mismatch: cannot convert from Rating.Rates to Rating
        rates[3] = Rates.Good;        // Type mismatch: cannot convert from Rating.Rates to Rating
        rates[4] = Rates.Excellent;   //Type mismatch: cannot convert from Rating.Rates to Rating
        rates[5] = Rates.Excellent;   //Type mismatch: cannot convert from Rating.Rates to Rating
        return rates;
    }

}

共 (2) 个答案

  1. # 1 楼答案

    看看这个方法:

    private enum Rates {
        Very_Bad(0), 
        Bad(1), 
        Mediocre(2), 
        Good(3), 
        Very_Good(4), 
        Excellent(5);
    
        private final int value;
    
        Rates(int value) {
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    
        public static Rates fromValue(int value) {
            for (Rates rates : Rates.values()) {
                if(Objects.equals(rates.getValue(), value)) {
                    return rates;
                }
            }
    
            throw new IllegalArgumentException("Unknown value: " + value);
        }
    }
    

    这将允许值与枚举键之间的映射

    ...
    Rates rate = Rates.fromValue(x);
    ...
    

    这也适用于其他value类型

    或者你可以更进一步,使用工厂设计模式来解决这个问题

  2. # 2 楼答案

    除了Rating作为枚举之外,我看不出有任何其他方式能让这一切变得有意义:

    public enum Rating {
        VERY_BAD,
        BAD,
        MEDIOCRE,
        GOOD,
        VERY_GOOD,  
        EXCELLENT;      
    } 
    

    由于枚举的成员是常量的一种,所以它们通常用所有的大写字母表示

    这样,你教授的代码就有意义了:

    protected static final Rating RATING = Rating.values()[Rating.values().length-1];
    

    这将是枚举中的最后一个值。(该values-方法是Enum固有的,无需创建。)

    编辑:

    //Representation of the act of rating something
    public class Rating {
        private Rate rate;
        private ThingToRate thing;
    
        //getters/setters/stuff
    
    }
    
    //Possible choices for rating something
    public enum Rate {
        VERY_BAD,
        BAD,
        MEDIOCRE,
        GOOD,
        VERY_GOOD,  
        EXCELLENT;
    }