当前位置: 首页 > 面试题库 >

枚举内的枚举

邢飞鸿
2023-03-14
问题内容

这不是卡住我的问题,而是我正在寻找一种编写代码的整洁方法。

本质上,我正在编写一个事件驱动的应用程序。用户触发一个事件,该事件被发送到适当的对象,然后这些对象处理事件。现在,我正在编写偶数处理程序方法,并且希望使用switch语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单:

public class Event {

    public static enum Action {
        MOVE, FOO, BAR
    }

    private Action action;
    private int duration;

    public Event(Action action, int duration) {
        this.action = action;
        this.duration = duration;
    }

    public Action getAction() {
        return action;
    }

    public int getDuration() {
        return duration;
    }

然后,在另一堂课中,我会看到类似以下内容的内容:

public void handleEvent(Event evt) {    
    switch(Event.getAction()) {
        case MOVE: doSomething(); break;
        case FOO:  doSomething(); break;
        case BAR:  doSomething(); break;
        default: break; 
    }
}

我会 喜欢 做的就是这样的事情(尽管我当然会坚持的开关语句转换成自己的职能,以避免它变成开关和案例讨厌的毛球):

public void handleEvent(Event evt) {    
    switch(Event.getAction()) {
        case MOVE: switch(Event.getAction()) {
                       case UP:    break;
                       case DOWN:  break;
                       case LEFT:  break;
                       case RIGHT: break;
                   }
        case FOO:  break;
        case BAR:  break;
        default:   break; 
    }
}

所以,我想创建嵌套枚举……

public static enum Action {
    public enum MOVE {UP, DOWN, LEFT, RIGHT}, FOO, BAR
}

并不是我无法避免这种情况,那只是……方便。因此,尽管上述方法实际上不起作用,但是有一些类似的方法可以实现这一点吗?如果我可以发送带有动作“
MOVE.UP”的事件,那将是很好的,并且该方法首先将其标识为MOVE类型的动作,然后再将其标识为特定于UP方向。那只是一个简单的示例,如果我还可以制作更长的链,例如“
DELETE.PAGE1.PARAGRAPH2.SENTENCE2.WORD11.LETTER3”,那将是一件令人高兴的事情。从我的角度来看,我将不得不使用Strings和许多if
/ else语句。希望有更好的方法!(哦,如果有帮助的话,性能对我来说很重要)


问题答案:

也许对事件使用继承层次结构?

所以你有了:

- abstract Event
-- MoveEvent(Direction)
-- FooEvent()
-- BarEvent()

拥有:

- abstract Event
-- abstract MoveEvent
--- MoveUpEvent
--- MoveDownEvent
--- MoveRightEvent
--- MoveLeftEvent
-- FooEvent
-- BarEvent

如果所有Move事件都有距离,则将其传递给MoveEvent构造函数(它将下降)。



 类似资料:
  • 问题内容: 我想知道在Java中是否可以嵌套枚举。 在这里,我想做的是: 拥有一个由CAT和DOG组成的物种,将允许我访问可用CAT和DOG品种的子枚举。例如,我希望能够测试是否装有CAT或DOG,以及动物是否是PERSAN CAT或PITBULL狗。CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我要使用的访问模式的示例: 种类: 物种 种狗 品种:

  • 使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。 数字枚举 首先我们看看数字枚举,如果你使用过其它编程语言应该会很熟悉。 enum Direction { Up = 1, Down, Left, Right } 如上,我们定义了一个数字枚举,Up使用初始化为1。 其余的成员

  • 枚举 枚举为一组相关值定义了一个通用类型,从而可以让你在代码中类型安全地操作这些值。 如果你熟悉 C ,那么你可能知道 C 中的枚举会给一组整数值分配相关的名称。Swift 中的枚举则更加灵活,并且不需给枚举中的每一个成员都提供值。如果一个值(所谓“原始”值)要被提供给每一个枚举成员,那么这个值可以是字符串、字符、任意的整数值,或者是浮点类型。 而且,枚举成员可以指定任意类型的值来与不同的成员值关

  • 本页内容包含: 枚举语法(Enumeration Syntax) 匹配枚举值与Swith语句(Matching Enumeration Values with a Switch Statement) 相关值(Associated Values) 原始值(Raw Values) 枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值。 如果你熟悉 C 语言,你就会知道

  • 枚举类型是在Solidity中的一种用户自定义类型。他可以显示的转换与整数进行转换,但不能进行隐式转换。显示的转换会在运行时检查数值范围,如果不匹配,将会引起异常。枚举类型应至少有一名成员。我们来看看下面的例子吧。 pragma solidity ^0.4.0; contract test { enum ActionChoices { GoLeft, GoRight, GoStraight

  • 由于第一章节是我翻译的,而且与他的版本不一致,导致第一章节有枚举这部分,而他的第二章节也有这部分,但内容不同,所以我保留了这部分。 枚举 使用枚举我们可以定义一些有名字的数字常量。 枚举通过使用enum关键字定义。 enum Direction { Up = 1, Down, Left, Right } 一个枚举类型可以包含零个或多个枚举成员。 枚举成员具有一个数字