所以我遇到了这段代码并且是初学者,我并不真正理解代码。我想知道是否有人可以向我解释代码。谢谢!
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());
}
}
主要是这段代码^代码,我需要一个解释,因为作为一个初学者,我从来没有使用过“&lt;&gt;”和“:”。我也不确定EnumMap是什么。优选地,可以详细解释这一个。什么是IRenderer?
修改 我也想要&lt;&gt;和:被叫,所以我可以在互联网上搜索并阅读它们。也欢迎链接:)
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();
}
这是用于组织游戏中所有状态的枚举状态。
感谢您的帮助和解释!
答案 0 :(得分:2)
1,EnumMap是一个Map,其键是Enum;
2,for(State state:State.values())...是迭代State枚举中所有项目的一种方便形式;
3,&LT;&GT;是Java中的泛型类型,就像C ++中的模板一样,它意味着特定的Type将在运行时被描述,
4,最后一段代码看起来像State pattern:不同的状态,不同的实现
答案 1 :(得分:2)
主要是这段代码^代码我需要解释 因为作为初学者,我从未使用过“&lt;&gt;”和“:”。我也不是 确定EnumMap是什么。优选地,可以完整地解释这一个 细节。
<>
是泛型声明的一部分,只是将您声明的类型与您正在使用的泛型类相关联。对于Map
,有两种类型,Key
和Value
,按照惯例,它们被声明为EnumMap<K,V>
所以当你说:
RENDERERS_MAP= new EnumMap<State, IRenderer>(State.class);
您说要创建EnumMap
Map
密钥为State
,Map
值为IRenderer
的{{1}}。一旦您使用所需类型声明特定EnumMap
,Java就会在Map
上检索或设置值时负责投射。
所以你可以说:
IRenderer myRenderer = RENDERERS_MAP.get(myState);
没有明确施法。
答案 2 :(得分:1)
EnumMap是一个专门用于枚举类型键的Map实现。枚举映射中的所有键必须来自显式或隐式指定的单个枚举类型。这里的Enum是国家。
现在,在这一行
RENDERERS_MAP= new EnumMap<State, IRenderer>(State.class);
您创建一个EnumMap类型的对象,其中State Enum用作键。它包含在&lt;&gt;中。因为国家也可以被任何其他枚举取代。 &LT;&GT;建议该类型是Generic。您可以使用任何其他枚举代替State。
接下来,
for (State state : State.values()) {
RENDERERS_MAP.put(state, getRender());
}
这个For循环用于逐个迭代所有EnumMap值,就像我们逐个迭代数组元素一样。 “:”用于在许多语言中进行迭代。它是Java foreach循环语法的一部分。在此循环中,使用put方法为RENDERERS_MAP的每个索引分配键和值。