爲什麼我們不能在Java中的具體方法中定義枚舉?如果我有一個場景,我將在方法中使用這些枚舉值,而不是在任何其他位置。在全球範圍內定義方法不是很好嗎?我的意思是公開或默認。
6
A
回答
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
}
相關問題
- 1. 爲什麼Java不允許開啓靜態枚舉?
- 2. 爲什麼即使在枚舉中沒有定義有效值時也允許使用枚舉轉換
- 3. 爲什麼MySQL在枚舉聲明中允許重複值
- 4. Java枚舉定義有什麼問題
- 5. 爲什麼我允許使用不完整的枚舉類?
- 6. C#泛型:不允許枚舉約束,爲什麼?
- 7. Java中的枚舉不允許在其實現接口中實現方法
- 8. 爲什麼JNI在枚舉中找不到自定義靜態?
- 9. 爲什麼Collections.enumeration附帶枚舉()方法
- 10. 爲什麼Java枚舉不可克隆?
- 11. 爲什麼C#允許一個無效的枚舉值
- 12. Java自定義枚舉值枚舉
- 13. Java枚舉方法
- 14. 爲什麼TypeScript允許未定義的方法?
- 15. 爲什麼java允許NPE
- 16. 爲什麼不允許嵌套類中的擴展方法定義?
- 17. Doctrine枚舉類型不允許添加非枚舉值嗎?
- 18. 有沒有什麼辦法可以在Python中定義枚舉?
- 19. 爲什麼枚舉包括可枚舉
- 20. 爲什麼在匿名方法中不允許out參數?
- 21. 爲什麼在WCF中不允許重載方法?
- 22. 爲什麼在靜態方法中不允許使用「this」?
- 23. 爲什麼Java不允許以
- 24. Java自定義枚舉
- 25. 在單獨的文件中爲每個枚舉定義方法
- 26. 在Silverlight中爲枚舉定義擴展方法
- 27. 什麼是Java枚舉?
- 28. 什麼是[?]以上枚舉/類定義?
- 29. 枚舉是否允許在Java中擁有setter?
- 30. 爲什麼枚舉在java中的序列化是不同的
Jon Skeet說[枚舉是隱含靜態的](http://stackoverflow.com/a/4827347/348975)。 – emory