亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有 Java 數據的 TypeSafe EventDispatcher

帶有 Java 數據的 TypeSafe EventDispatcher

白衣染霜花 2023-03-09 10:40:34
我嘗試用數據實現一個簡單的類型安全事件調度程序,即除了事件之外還可以傳遞任何數據。我發現了很多類型安全的事件調度程序問題或任何其他示例,但似乎沒有人能解決我的問題。這是我到目前為止得到的:public interface EventDispatcher {    <T> void registerCallback(Event<T> event, BiConsumer<T, Long> callback);    <T> void event(Event<T> event, T t, long param);}和public interface Event<T> {    String name();}這實際上有效(我有一個 EventDispatcher 接口的工作實現),可以通過使用 Enums 來“實現”事件接口,如下所示:public enum StringEvent implements Event<String> {    EVENT1,    EVENT2}我不滿意的是,我必須為所有要傳遞給調度程序的對象創建不同的枚舉。我在想這樣的事情public enum Events {    EVENT1(String.class),    EVENT2(String.class),    EVENT3(Long.class);    Events(Class<T> clazz) {        ...    }    ...}但這似乎并沒有導致可以在事件調度程序中使用的事件對象......有什么想法嗎?
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

到目前為止,我最好的方法是:


public class Events {

    private static <T> Event<T> create(String name) {

        return () -> name;

    }


    public static final Event<String> EVENT1 = create("Event1");

    public static final Event<String> EVENT2 = create("Event2");

    public static final Event<Long> EVENT3 = create("Event3");

}

比枚舉更冗長,但在我寫下所有事件后,它可以像枚舉一樣使用。但我仍然愿意接受更好的解決方案......


查看完整回答
反對 回復 2023-03-09
  • 1 回答
  • 0 關注
  • 84 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號