假设代码中有某个枚举声明:
enum Colors { RED(100), BLUE(200); }
我是否可以获得该特定枚举类型的最低/最高索引值,假设我不知道该声明?在java中可以吗?
示例:
int lowIndex = Colors.minIndex(); // should return 100
谢谢大家。因此没有隐式方法来查询最小/最大定义的整数值。我将不得不遍历枚举值,并按照您的描述从那里确定它。
答案 0 :(得分:3)
你必须遍历枚举集:
for (Color p : Color.values()) {
// keep track of min "index"
}
请记住,枚举本质上是预定义对象实例的集合。 RED(100)正在调用Color(int value)构造函数。也就是说,我可以使用如下定义的值制作颜色枚举:
RED("best", 14, 3.33546)
因此,找到最小“索引”的逻辑将根据具体情况而不同。
答案 1 :(得分:2)
使用索引是指枚举中给出的序数值还是整数值?
无论如何,这是一个可以帮助您的简单示例: -
enum Mobile {
Samsung(400), Nokia(250),Motorola(325);
int price;
Mobile(int p) { //values in brackets are set to price property in enum
price = p;
}
int showPrice() {
return price; //you have to declare methods in enum to return value, there is no predefined function like returnValue()
}
}
public class EnumDemo {
public static void main(String args[]) {
System.out.println("CellPhone List:");
for(Mobile m : Mobile.values()) {
System.out.println(m + " costs " + m.showPrice() + " dollars");
}
Mobile ret = Mobile.Samsung;
System.out.println("The ordinal is = " + ret.ordinal());
System.out.println("MobileName = " + ret.name());
}
}
请注意,java.lang.Enum.ordinal()方法返回枚举常量的序数(它在枚举声明中的位置,其中初始常量的序数为零)。
输出结果为: -
CellPhone List:
Samsung costs 400 dollars
Nokia costs 250 dollars
Motorola costs 325 dollars
The ordinal is = 0
MobileName = Samsung
答案 2 :(得分:0)
您无法覆盖枚举的索引'。这里发生的是Colors
枚举有一个构造函数,它以int
作为参数。它由构造函数的实现来存储该值。
您可以维护这些值的静态映射,由枚举构造函数更新,可以查询最小值/最大值。
或者,您可以在每次查找最小值/最大值时查看所有枚举:
int max = Integer.MIN_VALUE;
for (Colors c in Colors.values())
max = Math.max(c.getIndex(), max);
答案 3 :(得分:0)
这个怎么样?它"缓存"加载枚举时的值。
public enum Color {
RED(100),
BLUE(200);
public final int val;
private Color(int val) {
this.val = val;
if (Dummy.maxColor == null || Dummy.maxColor.val < val) {
Dummy.maxColor = this;
}
}
// This seems to be needed because you can't access static fields in enum constructors
private static class Dummy {
private static Color maxColor = null;
}
public static Color getMaxColor() {
return Dummy.maxColor;
}
}