0

所以我遇到了这段代码,作为一个初学者,我并没有真正理解代码。我想知道是否有人可以向我解释代码。谢谢!

private static final EnumMap<State, IRenderer> RENDERERS_MAP;
    static {
    RENDERERS_MAP= new EnumMap<State, IRenderer>(State.class);

   for (State state : State.values()) {
        RENDERERS_MAP.put(state, getRender());
   }
}

我需要解释的主要是这段代码^代码,因为作为初学者,我从未使用过“<>”和“:”。另外我不确定 EnumMap 是什么。最好能详细解释这一点。什么是 IRenderer?

编辑: 我也想要什么 <> 和 : 被称为所以我可以在互联网上搜索并阅读它们。也欢迎链接:)

void render() {
    Renderer currentRenderer = RENDERERS_MAP.get(currentState);
    if (ren  != null) {
        currentRenderer.render();
     }
}

这是我认为将代码呈现到屏幕上的一段代码。

public enum State {
    START_MENU() {
        @Override
        public Renderer getRenderer() {
            return new StartMenuRenderer();
        }
    },
    PLAYER_ONE_MENU() {
        @Override
        public Renderer getRenderer() {
            return new PlayerOneRenderer();
        }
    },
    PLAYER_TWO_MENU() {
        @Override
        public Renderer getRenderer() {
            return new PlayerTwoRenderer();
        }
    },
    WIN_SCREEN() {
        @Override
        public Renderer getRenderer() {
            return null;  //TODO: implement body
        }
    },
    LOSE_SCREEN() {
        @Override
        public Renderer getRenderer() {
            return null;  //TODO: implement body
        }
    },
    PLAY_SCREEN() {
        @Override
        public Renderer getRenderer() {
            return null;  //TODO: implement body
        }
    };

    public abstract Renderer getRenderer();
}

这是用于组织游戏中所有状态的枚举状态。

感谢您的所有帮助和解释!

4

3 回答 3

2

1、EnumMap是一个Map,其key是一个Enum;

2、for(State state : State.values())... 是迭代State枚举中所有项的便捷形式;

3、<>在Java中是泛型类型,类似于C++中的模板,表示具体的类型将在运行时确定,

4、最后一段代码看起来像 状态模式:不同的状态,不同的实现

于 2013-03-16T04:59:48.907 回答
2

我需要解释的主要是这段代码^代码,因为作为初学者,我从未使用过“<>”和“:”。另外我不确定 EnumMap 是什么。最好能详细解释这一点。

<>是泛型声明的一部分,它只是将您声明的类型与您正在使用的泛型类相关联。对于 a Map,有两种类型, theKey和 the Value,按照惯例,它们被声明为EnumMap<K,V>

所以当你说:

RENDERERS_MAP= new EnumMap<State, IRenderer>(State.class);

你是说你希望创建一个EnumMapMap是 a StateMap值是 an IRenderer。一旦你EnumMap用你想要的类型声明了你的特定类型,Java 然后在检索或设置Map.

所以你可以说:

IRenderer myRenderer = RENDERERS_MAP.get(myState);

没有显式转换。

于 2013-03-16T05:04:54.040 回答
1

EnumMap 是用于枚举类型键的专用 Map 实现。枚举映射中的所有键都必须来自明确或隐式指定的单个枚举类型。这里的枚举是状态。

现在,在这一行

RENDERERS_MAP= new EnumMap<State, IRenderer>(State.class);

您创建一个 EnumMap 类型的对象,其中 State Enum 用作键。它包含在 <> 中,因为 State 也可以用任何其他 Enum 替换。<> 表明该类型是通用的。您可以使用任何其他枚举来代替 State。

下一个,

for (State state : State.values()) {
        RENDERERS_MAP.put(state, getRender());
   }

这个 For 循环用于一个一个地迭代所有 EnumMap 值,就像我们一个一个地迭代数组元素一样。":" 用于在许多语言中进行迭代。它是 Java foreach 循环语法的一部分。在此循环中,使用 put 方法为 RENDERERS_MAP 的每个索引分配键和值。

于 2013-03-16T05:09:47.107 回答