[英]Generic interface with extends generic of Enums
我正在嘗試編寫一個通用的事件系統。 為此,我想為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 Generic的實現
public class DefaultGameEventHandler implements GameEventHandler<GameEvent<EventTypes, AttributeTypes>, EventTypes, AttributeTypes>
//不是通用的,正在測試枚舉
那我做錯了什么呢? 可以做我想做的嗎?
我會盡量保持簡單。 I
是一個GameEvent<TYPE, ATT>
,可以完全從TYPE
和ATT
扣除。 所以我只是刪除I
寫:
public interface GameEventHandler<TYPE extends Enum<?>, ATT extends Enum<?>> {
public void handleEvent(final GameEvent<TYPE, ATT>... e);
public void registerListener(final GameEventListener<TYPE, ATT> listener,
final TYPE... type);
public void unregisterListener(final GameEventListener<TYPE, ATT>... listener);
public void unregisterAllListener();
public void unregisterAllListener(final GameEvent<TYPE, ATT>... type);
public void processEvents();
public void processEvents(final int maxTimeInMS);
}
public class GameEventListener<TYPE extends Enum<?>, ATT extends Enum<?>> { }
public enum EventTypes {}
public enum AttributeTypes {}
public class DefaultGameEventHandler
implements GameEventHandler<EventTypes, AttributeTypes> {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.