Java - 创建方法数组

2022-09-02 14:24:07

我正在为学校的进步设计一个基于文本的冒险游戏。我将每个“级别”设置为一个类,并将每个可探索区域(节点)设置为相应类中的方法。

让我感到困惑的是从一个节点移动到另一个节点的代码。由于每个节点最多连接到四个其他节点,因此我必须在每个方法中重复一个极其相似的代码块。

我更喜欢做的是在每个节点的开头包含一个方法数组,如下所示:

public static void zero()
{
    ... adjacentNodes[] = {one(), two(), three(), four()};
}

然后将该数组发送到泛型方法,并让它将播放器发送到正确的节点:

public static void move(...[] adjacentNodes, int index)
{
    adjacentNodes[index];
}

我简化了我的代码,但这是一般的想法。这可能吗?


答案 1

每当您想到指向函数的指针时,都可以通过使用适配器模式(或变体)转换为Java。它将是这样的:

public class Node {
    ...
    public void goNorth() { ... }
    public void goSouth() { ... }
    public void goEast() { ... }
    public void goWest() { ... }

    interface MoveAction {
        void move();
    }

    private MoveAction[] moveActions = new MoveAction[] {
        new MoveAction() { public void move() { goNorth(); } },
        new MoveAction() { public void move() { goSouth(); } },
        new MoveAction() { public void move() { goEast(); } },
        new MoveAction() { public void move() { goWest(); } },
    };

    public void move(int index) {
        moveActions[index].move();
    }
}

答案 2

只要让你的节点都是都遵循同一接口的对象,那么你就可以可靠地调用它们的方法。