Skip to content

Commit b33166b

Browse files
committed
[Change] EventExecutor, BasicEventHandlerList 将方法检查过程分离出来;
[Add] NotAccepted 添加'拒绝接收'功能, 可指定某一符合事件接收要求的方法不接收事件; [Add] SimpleEventHandler 增加ignoredEventHandler作为检查NotAccepted注解生效状况的方法;
1 parent 3cf6361 commit b33166b

File tree

4 files changed

+57
-18
lines changed

4 files changed

+57
-18
lines changed

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,8 @@ public void addEventHandler(Class<? extends EventHandler> eventHandler) throws I
3232

3333
Method[] methods = eventHandler.getDeclaredMethods();
3434
for(Method method : methods){
35-
int methodModifiers = method.getModifiers();
36-
if(!Modifier.isPublic(methodModifiers)){
37-
continue;
38-
}
3935
Class<?>[] parameterTypes = method.getParameterTypes();
40-
if(parameterTypes.length != 1){
41-
continue;
42-
}
43-
if(!EventObject.class.isAssignableFrom(parameterTypes[0])){
36+
if(!EventExecutor.checkMethod(method)) {
4437
continue;
4538
}
4639
addEventHandlerMethod(parameterTypes[0].asSubclass(EventObject.class), method);

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

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -153,18 +153,10 @@ public int executor(EventHandler handler, EventObject eventObject) throws Illega
153153
Method[] methods = handlerClass.getDeclaredMethods();
154154
int invokeCount = 0;
155155
for (Method method : methods) {
156-
int methodModifiers = method.getModifiers();
157-
if(!Modifier.isPublic(methodModifiers)){
156+
if(!checkMethod(method, eventObject)) {
158157
continue;
159158
}
160-
Class<?>[] types = method.getParameterTypes();
161-
if(types.length != 1){
162-
continue;
163-
}
164-
if(!types[0].isAssignableFrom(eventObject.getClass())){
165-
continue;
166-
}
167-
159+
168160
executeEvent(handler, eventObject, method, null);
169161
invokeCount++;
170162
}
@@ -350,6 +342,43 @@ public static void resendCurrentEvent() {
350342
}
351343
}
352344

345+
/**
346+
* 检查指定方法是否为合法的事件接收方法
347+
* @param method 待检查的方法
348+
* @return 如果是合法的事件接收方法, 返回true
349+
*/
350+
public static boolean checkMethod(Method method) {
351+
return checkMethod(method, null);
352+
}
353+
354+
/**
355+
* 检查指定方法是否为合法的事件接收方法
356+
* @param method 待检查的方法
357+
* @param eventObject 指定的EventObject, 如没有指定可为null, 指定后, 将会检查继承性
358+
* @return 如果是合法的事件接收方法, 返回true
359+
*/
360+
private static boolean checkMethod(Method method, EventObject eventObject) {
361+
int methodModifiers = method.getModifiers();
362+
if(!Modifier.isPublic(methodModifiers)){
363+
return false;
364+
}
365+
Class<?>[] types = method.getParameterTypes();
366+
if(types.length != 1){
367+
return false;
368+
}
369+
if(eventObject == null) {
370+
if(!EventObject.class.isAssignableFrom(types[0])) {
371+
return false;
372+
}
373+
} else {
374+
if(!types[0].isAssignableFrom(eventObject.getClass())) {
375+
return false;
376+
}
377+
}
378+
379+
return method.getDeclaredAnnotation(NotAccepted.class) == null;
380+
}
381+
353382
@Override
354383
protected void finalize() {
355384
threadPoolExecutor.shutdownNow();
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.lamgc.utils.event;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Target({ElementType.METHOD})
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface NotAccepted {
11+
}

src/test/java/net/lamgc/utils/event/SimpleEventHandler.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ public void simpleEventHandler(SimpleEventObject event){
1313
event.invokeCount.incrementAndGet();
1414
}
1515

16+
@NotAccepted
17+
public void ignoredEventHandler(SimpleEventObject event){
18+
System.out.println(this.toString() + "." + flag + " - [" + event.errorCode + "] " + event.msg);
19+
event.invokeCount.incrementAndGet();
20+
}
21+
1622
public void resendTestEvent(ResendEventObject event) {
1723
event.addInvokeCount();
1824
if(event.isFirstInvoke()) {

0 commit comments

Comments
 (0)