我可以将此功能压缩到枚举中吗?我还想在另一个文件的 switch 语句中使用枚举。如果可能的话,我也想把事情保密。我知道你可以对 Java 中的枚举做更多的事情,但文献有点混乱。
public static class SCENE {
public enum scene {
MENU,
PLAY
}
public static scene current = scene.MENU;
public static void switchToMenu() {
current = scene.MENU;
}
public static void switchToPlay() {
current = scene.PLAY;
}
};
答案 0 :(得分:1)
枚举类 (enum
) 与普通类类似,但受限制:
clone
;Enum<E>
;abstract
尽管如此(还有一些我忘记了),可以用 普通 类完成的所有事情,都可以用 enum
完成:使用所有类型的字段和方法。甚至每个枚举常量也可以有自己的字段或方法。
但是,正如已经评论过的,并不是所有的东西都是有意义的或推荐的 - 比如有一个状态,非 final
字段。
public class Scene {
public enum Type { // maybe SceneType?
MENU,
PLAY;
private void switchTo() { // instance method, just an example
current = this; // bad example, should not change `Scene`'s state
}
}
public static Type current = Type.MENU;
public static void switchTo(Type type) {
Objects.requireNonNull(type);
current = type;
/* alternative, to show switch usage
switch (type) {
case PLAY:
current = Type.PLAY;
break;
case MENU:
...
*/
}
// just for demonstration, not the best solution
public static void switchToMenu() {
Type.MENU.switchTo();
}
public static void switchToPlay() {
Type.PLAY.switchTo();
}
}
未测试,没有损坏(使用)IDE,小错误留给用户解决
对于上述简单的情况,我建议只在 switchTo(Type)
中使用 Scene
方法; 不是 switchTo()
中的 Type
- 添加只是作为可以做什么的示例。 Type.switchTo()
方法很奇怪,它正在访问 Scene
的字段,这不仅仅是一种类型,是此类功能的错误位置。 >
Obs:由于枚举类的工作方式与普通类一样,因此它们也可以在自己的文件中声明。但是对于发布的代码,由于 绑定 到 Scene
,它可以保留为嵌套枚举 - 必须像 Scene.Type.PLAY
一样从其他类访问。 (您的 SCENE 看起来像是嵌套的 - static
关键字不允许在顶级类中使用 - 所以实际路径会更长,例如SomeClass.Scene.Type.PLAY
)
链接:
答案 1 :(得分:0)
你可以使用 current
作为字符串
public enum Scene {
MENU ("MENU"),
PLAY ("PLAY");
private final String current;
private Scene (String current) {
this.current = current;
}
}