@@ -38,7 +38,7 @@ private TriggerContext(){
38
38
* @param handler 触发订阅
39
39
*/
40
40
public void addTrigger (TriggerHandler handler ){
41
- Class <? extends Trigger > clazz = getTriggerClass (handler );
41
+ Class <? extends Trigger > clazz = getTriggerClass (handler . getClass () );
42
42
List <TriggerHandler > triggerList = this .triggers .get (clazz );
43
43
if (triggerList ==null ){
44
44
triggerList = new CopyOnWriteArrayList <>();
@@ -53,9 +53,14 @@ public void addTrigger(TriggerHandler handler){
53
53
* @param handler 触发订阅
54
54
* @return Trigger类型
55
55
*/
56
- private Class <? extends Trigger > getTriggerClass (TriggerHandler handler ){
57
- ParameterizedType parameterizedType = (ParameterizedType ) handler .getClass ().getGenericInterfaces ()[0 ];
58
- return (Class <? extends Trigger >) parameterizedType .getActualTypeArguments ()[0 ];
56
+ private Class <? extends Trigger > getTriggerClass (Class <?> handler ){
57
+ for (Class <?> superInterface : handler .getInterfaces ()) {
58
+ if (superInterface .equals (TriggerHandler .class )) {
59
+ ParameterizedType parameterizedType = (ParameterizedType ) handler .getGenericInterfaces ()[0 ];
60
+ return (Class <? extends Trigger >) parameterizedType .getActualTypeArguments ()[0 ];
61
+ }
62
+ }
63
+ return getTriggerClass (handler .getSuperclass ());
59
64
}
60
65
61
66
@@ -67,7 +72,7 @@ public void trigger(Trigger trigger){
67
72
Class <? extends Trigger > clazz = trigger .getClass ();
68
73
List <TriggerHandler > triggerHandlerList = triggers .get (clazz );
69
74
for (TriggerHandler handler :triggerHandlerList ){
70
- Class <? extends Trigger > triggerClass = getTriggerClass (handler );
75
+ Class <? extends Trigger > triggerClass = getTriggerClass (handler . getClass () );
71
76
if (triggerClass .equals (clazz )) {
72
77
try {
73
78
boolean canTrigger = handler .preTrigger (trigger );
0 commit comments