Is there a reason why exact matching is used when comparing generic types? Why not stick to isAssignable
?
https://github.com/spring-projects/spring-framework/blob/dcc342ccc5cd8cc048c761035ee8cc60a3675c30/spring-core/src/main/java/org/springframework/core/ResolvableType.java#L346-L350
My use case: I am using a generic base event class, such as BaseEvent<T> extends PayloadApplicationEvent<T>
, and I am expecting BaseEvent<Y>
to fall into a listener expecting BaseEvent<X>
, where Y
extends X
, but that's not happening as the types of X
and Y
are not equal, but X
is assignable from Y
.
I would like to precise that I extend PayloadApplicationEvent
here but extending ApplicationEvent
and implementing ResolvableTypeProvider
leads to the same issue.
Is there a way for this to work while using @EventListener
? I know that it can be done with the listener implementing GenericApplicationListener
but that will lead to messy code.
Any clues? Thanks.
Comment From: rstoyanchev
The change seems to originate with #15844.
Comment From: torshid
Okay so when the listener expects BaseEvent<? extends X>
everything works as expected. Seems that this is the expected behavior.