Rob Elliot
11/30/2023, 6:16 PMsetInt(Integer value)
& setInt(int value)
. They both override to the same signature in Kotlin...
Is there an escape hatch?Shawn
11/30/2023, 6:23 PMShawn
11/30/2023, 6:23 PMInt
and Int?
Rob Elliot
11/30/2023, 6:33 PMclass Decorator : BaseClass() {
val delegate = BaseClass()
override fun setInt(integer: Int?) { delegate.setInt(integer) }
override fun setInt(integer: Int) { delegate.setInt(integer) }
}
results in this error:
e: file:///Decorator.kt:6:12 Accidental override: The following declarations have the same JVM signature (setInt(Ljava/lang/Integer;)V):
fun setInt(integer: Int?): Unit defined in io.mocklab.host.openapi.linenumbers.Decorator
fun setInt(integer: Int?): Unit defined in io.mocklab.host.openapi.linenumbers.Decorator
Rob Elliot
11/30/2023, 6:39 PMclass Decorator : BaseClass() {
val delegate = BaseClass()
override fun setInt(integer: Int) { delegate.setInt(integer) }
}
then Java code calling setInt
will be routed to this method whether an Integer
or an int
is supplied as the argument, so at least I'm always intercepting it.
Still not great - if I make the parameter nullable then calls with an int
are not intercepted, but if it's not nullable calls with null
blow up with an NPE.ephemient
12/01/2023, 1:37 AMclass Decorator : BaseClass() {
val delegate = BaseClass()
@Suppress("ACCIDENTAL_OVERRIDE")
@JvmName("setInt")
fun setPrimitiveInt(integer: Int) {
delegate.setInt(integer)
}
@Suppress("ACCIDENTAL_OVERRIDE")
@JvmName("setInt")
fun setBoxedInt(integer: Int?) {
delegate.setInt(integer)
}
}
Rob Elliot
12/01/2023, 9:30 AM