簡體   English   中英

具有擴展通用枚舉的通用接口

[英]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> ,可以完全從TYPEATT扣除。 所以我只是刪除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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM