0

好吧,我已经做了一个,但我不知道它是否是最好的。谁能给我写一个好的教程?我用一个教程做了这个,我理解了 90% 的内容,但有 10% 的折扣,这似乎不是最好的方法。

事件管理器.java

公共类 EventManager {

private static List<Listener> registered = new ArrayList<Listener>();

public static void register(Listener listener) {
    if (!registered.contains(listener)) {
        registered.add(listener);
    }
}

public static void unregister(Listener listener) {
    if (registered.contains(listener)) {
        registered.remove(listener);
    }
}

public static List<Listener> getRegistered() {
    return registered;
}

public static void callEvent(final Event event) {
    new Thread() {
        @Override
        public void run() {
            call(event);
        }
    }.start();
}

private static void call(final Event event) {
    for (Listener registered : getRegistered()) {
        Method[] methods = registered.getClass().getMethods();

        for (int i = 0; i < methods.length; i++) {
            EventHandler eventHandler = methods[i].getAnnotation(EventHandler.class);
            if (eventHandler != null) {
                Class<?>[] methodParams = methods[i].getParameterTypes();

                if (methodParams.length < 1) {
                    continue;
                }

                if (!event.getClass().getSimpleName().equals(methodParams[0].getSimpleName())) {
                    continue;
                }

                try {
                    methods[i].invoke(registered.getClass().newInstance(), event);
                } catch (Exception exception) {
                    System.err.println(exception);
                }
            }
        }

    }
}

}

事件处理程序.java

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface EventHandler {

}

而 Event.java 和 Listener.java 是空白接口。

4

0 回答 0