簡體   English   中英

如何確定java中枚舉的最低/最高索引?

[英]How to determine lowest/highest index of enum in java?

假設在代碼中的某處有枚舉聲明:

enum Colors { RED(100), BLUE(200); }

我是否可以獲得該特定枚舉類型的最低/最高索引值,假設我不知道該聲明? 在java中有可能嗎?

例:

int lowIndex = Colors.minIndex(); // should return 100

感謝大家。 因此沒有隱式方法來查詢最小/最大定義的整數值。 我將不得不遍歷枚舉值,並根據您的描述從那里確定它。

你必須遍歷枚舉集:

for (Color p : Color.values()) {
    // keep track of min "index"
}

請記住,枚舉本質上是預定義對象實例的集合。 RED(100)正在調用Color(int value)構造函數。 也就是說,我可以使用如下定義的值制作顏色枚舉:

RED("best", 14, 3.33546)

因此,找到最小“索引”的邏輯將根據具體情況而不同。

使用索引是指枚舉中給出的序數值還是整數值?

無論如何,這是一個可以幫助您的簡單示例: -

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

你不能覆蓋枚舉的'索引'。 這里發生的是Colors enum有一個構造函數,它以int作為參數。 由構造函數的實現來存儲該值。

您可以維護這些值的靜態映射,由枚舉構造函數更新,可以查詢最小值/最大值。

或者,您可以在每次查找最小值/最大值時查看所有枚舉:

int max = Integer.MIN_VALUE;
for (Colors c in Colors.values())
  max = Math.max(c.getIndex(), max);

那這個呢? 它在加載枚舉時“緩存”該值。

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM