好吧,我已经做了一个,但我不知道它是否是最好的。谁能给我写一个好的教程?我用一个教程做了这个,我理解了 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 是空白接口。