I am trying to use inline classes in performance critical code and thus would like to avoid boxing.
I understand the documentation states that when using a inline class in a generic type (kotlin.Function<out R>
in my case) it will be boxed.
E.g.:
inline class MyInt(val i: Int)
fun foo(i: MyInt, f: (MyInt) -> Unit) {
f(i) // i is boxed
}
One way to get around this is to create a new function interface, e.g.
interface MyFun {
operator fun invoke(i: MyInt)
}
fun foo2(i: MyInt, f: MyFun) {
f(i) // i is not boxed
}
But this has other problems: Cannot use lambdas, cannot pass kotlin.Function
s directly.
Is there another, more elegant solution to this?