2015-05-07 35 views
0

我對java.awt中的values()方法如何工作有點好奇。在Java規範文檔中可以看到,我們可以迭代每個循環中某個枚舉類型的所有值。例如Java中的枚舉類型:values()in for each loop

for (Planet p : Planet.values()) { 
System.out.printf("Your weight on %s is %f%n", 
        p, p.surfaceWeight(mass)); 
} 

我認爲每個循環遍歷所有值。在這個調用中,我們在每個循環調用中重複調用一個方法,所以它將如何遍歷所有枚舉類型或values()方法使用某種類型的迭代器。任何人都可以幫助我實現這個方法的文檔嗎?

+0

你的問題是什麼? – Andremoniy

+2

*「在此調用中,我們在每個循環調用中重複調用一個方法」*否,'values()'方法將被稱爲_once_,然後遍歷返回的Array。 – Tom

+0

看看這個SO的答案,詳細描述[how-is-javas-for-loop-code-by-the-the-compiler](https://stackoverflow.com/questions/3433282/how-is- javas-for-loop-code-generated-by-the-compiler#3433775) – SubOptimal

回答

4

values()方法返回數組enum值。在Java中,您可以使用for(Object obj : arr)語法遍歷數組。這只是一個句法糖。在編譯隱含int局部變量將被創建和週期將被改寫這樣的:

Planet[] vals = Planet.values(); 
for(int i=0; i<vals.length; i++) { 
    Planet p = vals[i]; 
    System.out.printf("Your weight on %s is %f%n", 
       p, p.surfaceWeight(mass)); 
} 
+0

這可能很有趣:[關於增強for循環的JLS](http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.14.2)。 – Tom

0

你是對的 - .values()返回枚舉的可能值的數組。

該數組可用於迭代,並且在每個迭代步驟中,您將獲得另一個此Enum的值,您可以像使用其他任何值一樣使用該值。例如,調用它們的方法。

0

方法values()在編譯時生成。

每個enumjava.lang.Enum的一個子類。在內部,它將枚舉元素保存在一個數組中。

當調用values()時,會生成並複製一個新數組,然後再返回給您。