I’m asking it with no offense, just for a curiosity.
While I was coding my own
org.springframework.web.method.support.HandlerMethodArgumentResolver
implementation, I met a new requirement for myself, which is “Can I tell this ‘target’ parameter is
Kotlin nullable
?”. At a first glance, I knew that there’s
org.springframework.core.MethodParameter#hasParameterAnnotation
so I thought that this problem is easily solved, but what an unlucky day!
Ditched in about half hours with debugger, I finally figured out that it is impossible, because while Kotlin nullable is compiled into jvm environment, it is annotated with
@org.jetbrains.annotations.Nullable
but it is marked as
RetentionPolicy.CLASS
, on contrast to
@javax.annotation.Nullable
is declared as
RetentionPolicy.RUNTIME
.
I know that there’s a method
isMarkedNullable
in
KType
but in this scenario I only could get
java.lang.Class
not
KClass
, and during the conversion between
KClass
and
KType
, such “marked as nullable” information is completely gone because those two types are incompatible(
discussed in here already
).
Fortunately I found another workaround which is totally off from this topic, but still my curiosity is not resolved. Could anybody tell me some background story, reasons for this decision, etc., please?