Как сделать систему событий на основе аннотаций?JAVA

Программисты JAVA общаются здесь
Anonymous
Как сделать систему событий на основе аннотаций?

Сообщение Anonymous »

Ну, я уже сделал один, но я не знаю, лучший ли это TBH. Кто -нибудь может написать мне хороший учебник? Я сделал это с учебником, и я понял 90% от этого, но 10% отключений, и кажется, что это не лучший способ сделать это.
EventManager.java

Код: Выделить всё

public class EventManager {

private static List registered = new ArrayList();

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 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);
}
}
}
}
}
}
< /code>
eventhandler.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface EventHandler {
}
и event.java и слушатель. Java - пустые интерфейсы.


Подробнее здесь: https://stackoverflow.com/questions/244 ... ent-system

Вернуться в «JAVA»