返回枚举的值,但类在类的数组中

时间:2017-03-21 18:31:13

标签: java enums

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

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 个答案:

答案 0 :(得分:0)

我无法看到任何其他方式比Rating作为枚举更有意义:

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

由于枚举的成员是一种常量,它们通常以全部大写字母表示。

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

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

然后它将是枚举中的最后一个值。 (values - 方法是枚举的原生方法,无需创建它。)

编辑:

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

答案 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类型。

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

相关问题