1
我想寫一個通用的事件系統。爲此,我想創建爲EventHandler
這樣接口(不工作):通用接口擴展通用枚舉
public interface GameEventHandler<I extends GameEvent<TYPE extends Enum<?>, ATT extends Enum<?>>> {
public void handleEvent(final GameEvent<TYPE, ATT>... e);
public void registerListener(final GameEventListener<I> listener,
final TYPE... type);
public void unregisterListener(final GameEventListener<I>... listener);
public void unregisterAllListener();
public void unregisterAllListener(final I... type);
public void processEvents();
public void processEvents(final int maxTimeInMS);
}
但正如我認爲它應該這樣是行不通的。
事件本身是一個通用的元素,這是非常簡單的:
public class GameEvent<T extends Enum<?>, S extends Enum<?>> {
private HashMap<S, String> values;
private T type;
public void init(T type) {
this.type = type;
}
public T getType() {
return this.type;
}
public void addMessage(S t, String value) {
this.values.put(t, value);
}
public void getMessage(S t) {
this.values.get(t);
}
}
如果我實現HandlerInterface
我想擁有它仍然是通用的,所以有一些像DefaultHandler<GameEvent<TypeEnum, AttributEnum>>()
創建它。所以你可以使用接口來創建你自己的處理程序,或使用我提供的DefaultHandler
,但仍然可以使用自己的枚舉。
在我能夠創造這樣的界面的那一刻:
public interface GameEventHandler<I extends GameEvent<TYPE, ATT>, TYPE extends Enum<?>, ATT extends Enum<?>>
但我沒有得到一個DefaultHandler的通用
public class DefaultGameEventHandler implements GameEventHandler<GameEvent<EventTypes, AttributeTypes>, EventTypes, AttributeTypes>
//不是通用的執行情況是測試枚舉
那麼我做錯了什麼?有可能做我想做的事嗎?