Skip to content

Commit 974feee

Browse files
committed
Add delete event handler related methods;
1 parent c31db0a commit 974feee

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

src/main/java/net/lamgc/utils/event/BasicEventHandlerList.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,27 @@ public void addEventHandlerMethod(Class<? extends EventObject> eventObject, Meth
4343
eventMethodMap.put(eventObject, new HashSet<>());
4444
}
4545
eventMethodMap.get(eventObject).add(eventHandlerMethod);
46-
//System.out.println("已添加新的Handler方法: Class[" + eventHandlerMethod.getDeclaringClass().getSimpleName() + "] methodName[" + eventHandlerMethod.getName() + "] eventObject[" + eventObject.getSimpleName() + "]");
46+
}
47+
48+
@Override
49+
public void removeEventHandler(Class<? extends EventHandler> handler) {
50+
Method[] methods = handler.getDeclaredMethods();
51+
for(Method method : methods){
52+
int modifiers = method.getModifiers();
53+
if(!Modifier.isPublic(modifiers) || Modifier.isAbstract(modifiers) || Modifier.isInterface(modifiers)){
54+
//System.out.println("方法不是公开的/抽象方法/接口方法: " + modifiers);
55+
continue;
56+
}
57+
Class<?>[] parameterTypes = method.getParameterTypes();
58+
if(parameterTypes.length != 1){
59+
//System.out.println("参数过多: " + parameterTypes.length);
60+
continue;
61+
}
62+
if(!EventObject.class.isAssignableFrom(parameterTypes[0])){
63+
//System.out.println("不是EventObject子类");
64+
continue;
65+
}
66+
eventMethodMap.get(parameterTypes[0]).remove(method);
67+
}
4768
}
4869
}

src/main/java/net/lamgc/utils/event/EventHandlerList.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,17 @@ public interface EventHandlerList {
3131
*/
3232
void addEventHandlerMethod(Class<? extends EventObject> eventObject, Method eventHandlerMethod);
3333

34+
/**
35+
* 通过{@link EventHandler}对象删除EventHandler
36+
* @param handler 要删除的Handler对象
37+
*/
38+
default void removeEventHandler(EventHandler handler){
39+
removeEventHandler(handler.getClass());
40+
}
41+
42+
/**
43+
* 通过{@link EventHandler}Class删除EventHandler
44+
* @param handler 要删除的Handler Class
45+
*/
46+
void removeEventHandler(Class<? extends EventHandler> handler);
3447
}

src/main/java/net/lamgc/utils/event/EventHandlerObjectMap.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,11 @@ public interface EventHandlerObjectMap {
1818
* @return 如果找到则返回EventHandler对象, 无则返回null
1919
*/
2020
EventHandler getHandlerObject(Class<?> eventHandlerClass);
21+
22+
/**
23+
* 删除指定的{@link EventHandler}
24+
* @param handler 要删除的Handler
25+
*/
26+
void removeHandlerObject(EventHandler handler);
27+
2128
}

src/main/java/net/lamgc/utils/event/HashHandlerObjectMap.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,9 @@ public void addHandlerObject(EventHandler eventHandler) {
1515
public EventHandler getHandlerObject(Class<?> eventHandlerClass) {
1616
return handlerMap.get(eventHandlerClass);
1717
}
18+
19+
@Override
20+
public void removeHandlerObject(EventHandler handler) {
21+
handlerMap.remove(handler.getClass());
22+
}
1823
}

0 commit comments

Comments
 (0)