嗨,我了解 Java 很长时间了,最近我一直在深入研究 Java 世界。 作为一名经验丰富的 c# 开发人员,我发现使用 Java 枚举很奇怪。 例如,如果我在控制台上显示以下项目:
public enum AdminOpertionFirstlayer
{MANAGE_SUPPLY,
MANAGE_CUSTOMERS_SERVICE,
ORDERS_MANAGEMENT,
REPORTING_OPRATIONES}
我发现很难将它们写下来给用户,因为我必须定义新变量
*AdminOpertionFirstlayer []adminOpertionFirstlayerArr =
AdminOpertionFirstlayer.values();
为了实现这个:
for (int i = 0; i < adminOpertionFirstlayerArr.length; i++) {
String s = String.format("%d. %s",
i+1,
adminOpertionFirstlayerArr[i].toString());
Screen.print(s);
}
AdminOpertionFirstlayer chosen= adminOpertionFirstlayerArr
[(Integer.parseInt(dataIn.readLine()))-1];
但我觉得在 * 上声明是一种不好的做法
- 是否有最佳实践(枚举扩展是一个...)?
- 是否有可用的 TryParse 或每次解析时我都应该尝试并捕获?
谢谢
编辑
这样做是否易于理解和阅读?
public enum MainMenuOptiones{
ADMIN {public void secondLayerMenu(){
Main.AdminSecondLayerMenu();}},
CUSTOMER{public void secondLayerMenu(){
Main.customerSecondLayerMenu();}},
EXIT{public void secondLayerMenu(){
System.exit(1);}},
UNAPPLICABLE{public void secondLayerMenu(){
Screen.printToScreen("chice doesnt exist try again");}};
abstract public void secondLayerMenu();
}
phrphes 并没有使用所有的 switch 机制 我可以用
enumInstance.secondLayerMenu();
最佳答案
您可以使用 Java 的增强 for 循环(以及枚举的序数值)
for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) {
String s = String.format("%d. %s", operator.ordinal(), operator);
Screen.print(s);
}
然后您可以使用序数值重新创建枚举:
AdminOperatorFirstLayer chosen =
AdminOperatorFirstLayer.values()[(Integer.parseInt(dataIn.readLine()))];
或者您可以使用名称:
for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) {
String s = String.format("%s. %s", operator.name(), operator);
Screen.print(s);
}
然后您可以使用 valueOf 值重新创建枚举:
AdminOperatorFirstLayer chosen =
AdminOperatorFirstLayer.valueOf(dataIn.readLine()];
关于java - 处理枚举的 Java 最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290738/