所以我遇到了这段代码,并且作为初学者,我并没有真正理解代码。我想知道是否有人可以向我解释代码。谢谢!代码说明:枚举和渲染
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();
}
这是用来组织游戏中所有状态的枚举状态。
谢谢你的帮助和解释!
泛型是用于编译器强制执行的类型安全。 – 2013-03-16 05:07:15
是的,在这个例子中,强制V是一个IRenderer,具体类型将在运行系统中被定位。 – BlackJoker 2013-03-16 05:09:22
IMO,这里的具体类型是'IRenderer',它在编译时决定。在Java中,由于类型擦除,泛型在运行时不可用。 – 2013-03-16 05:13:11