2012-06-14 93 views
6

可能重複:
Java: Local Enums爲什麼Java不允許在方法中定義枚舉?

爲什麼我們不能在Java中的具體方法中定義枚舉?如果我有一個場景,我將在方法中使用這些枚舉值,而不是在任何其他位置。在全球範圍內定義方法不是很好嗎?我的意思是公開或默認。

+0

Jon Skeet說[枚舉是隱含靜態的](http://stackoverflow.com/a/4827347/348975)。 – emory

回答

7

您不能在JavaDocs所述的方法級別進行定義。 (我希望看到一種允許的語言)

嵌套枚舉類型是隱式靜態的。允許顯式聲明一個嵌套的枚舉類型爲靜態的。

這意味着不可能定義一個本地(§14.3)枚舉,或者定義一個內部類的枚舉(§8.1.3)。

你可以做它在類的級別和變量在方法級別聲明它:

public class Light { 
    ... 
    private LightSwitch position; 
    private enum LightSwitch { 
     On, 
     Off 
    } 
    public void SwitchOn() { 
     Switch(LightSwitch.On); 
    } 
    public void SwitchOff() { 
     Switch(LightSwitch.Off); 
    } 
    private void Switch(LightSwitch pos) { 
     position = pos; 
    } 
} 
+0

問題是爲什麼,你不能是給定的事實。 「我希望看到一種允許這樣的語言」 - C和C++。 –

3

JLS

嵌套枚舉類型隱含靜態的。允許 顯式聲明一個嵌套的枚舉類型爲靜態的。

這意味着它是不可能定義一個局部(§14.3)枚舉,或 在一個內部類定義枚舉(§8.1.3)。

另外,它們通常是隱含的最終結果。將枚舉作爲類的一部分是一般模式,因爲它們通常表現爲常量。

枚舉類型是隱式最終的,除非它至少包含一個具有類體的枚舉常量。

0

不能法中定義枚舉,但你可以定義類,所以如果你真的想設計自己的方法,這樣,你可以定義你的本地類對象的數組。

public void doSomething() { 
    class Country { 
     int population = 0; 
     String name = null; 

     public Country(int population, String name) { 
      this.population = population; 
      this.name = name; 
     } 

    } 
    Country[] countries = { new Country(85029304, "Germany"), new Country(61492053, "Spain") }; 
    // do stuff with countries 
}