0

ええと、私はすでにそれを作成しましたが、それが最高のtbhかどうかはわかりません. 誰かが私に良いチュートリアルを書いてくれますか? 私はチュートリアルでこれを作りました.90%を理解しましたが、10%オフで、これが最善の方法ではないようです.

EventManager.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);
                }
            }
        }

    }
}

}

EventHandler.java

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

}

Event.java と Listener.java は空のインターフェイスです。

4

0 に答える 0