我得到了一个等级,我需要返回一个包含所有枚举值的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;
}
}
答案 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
类型。
或许你可以更进一步,并使用工厂设计模式来解决这个问题。