Thank you.
It works now!

Johan Stuyts <johanstu...@squins.com> 於 2025年3月18日 週二 上午12:13寫道:
>
> The way code for lambdas is generated was changed in 2.0. You have to switch 
> back to the legacy implementation : 
> https://kotlinlang.org/docs/whatsnew20.html#generation-of-lambda-functions-using-invokedynamic
>
> In your build.gradle.kts:
>
> tasks.withType<KotlinCompile> {
>      compilerOptions {
>          freeCompilerArgs = listOf(<any other options that you need>, 
> "-Xlambdas=class")
>      }
> }
>
>
> Op Mon, 17 Mar 2025 11:46:48 +0100 schreef smallufo <small...@gmail.com>:
>
> > private val nameField: TextField<String> = TextField("name",
> > model.flatMap { m -> LambdaModel.of( { m.name }, { m.name = it } ) })
> >
> > (with wicket 10)
> > The old code works well with Kotlin 1.9
> > But after upgrading kotlin to 2.x
> >
> > It shows exception :
> > private java.lang.Object
> > org.apache.wicket.MarkupContainer.children[write:1]
> > [class=org.apache.wicket.markup.html.form.TextField, path=3:form:name]
> > java.lang.Object org.apache.wicket.Component.data
> > [class=java.lang.Object] final
> > org.danekja.java.util.function.serializable.SerializableFunction
> > org.apache.wicket.model.IModel$4.val$mapper [class=java.lang.Object]
> >
> > It seems Kotlin 2 no longer produce serializable lambda.
> > I tried these ways :
> >
> > class SerializableLambdaModel<T>(
> >     private val getter: () -> T,
> >     private val setter: (T) -> Unit
> > ) : IModel<T>, java.io.Serializable {
> >
> >     override fun getObject(): T = getter()
> >
> >     override fun setObject(value: T) {
> >         setter(value)
> >     }
> >
> >     override fun detach() {
> >     }
> > }
> > not working
> >
> > and this
> >
> > class SerializableLambdaModel<T>(
> >   getter: () -> T,
> >   setter: (T) -> Unit
> > ) : IModel<T>, java.io.Serializable {
> >
> >   private val getterFunc: () -> T = object : java.io.Serializable {
> >     override fun toString(): String = getter().toString()
> >     fun get(): T = getter()
> >   }
> >
> >   private val setterFunc: (T) -> Unit = object : java.io.Serializable {
> >     fun set(value: T) = setter(value)
> >   }
> >
> >   override fun getObject(): T = getterFunc.get()
> >
> >   override fun setObject(value: T) {
> >     setterFunc.set(value)
> >   }
> >
> >   override fun detach() {}
> > }
> >
> > and this
> >
> > import org.apache.wicket.model.IModel
> > import java.io.Serializable
> >
> > class SerializableLambdaModel<T : Any?>(
> >     private val getter: () -> T,
> >     private val setter: (T) -> Unit
> > ) : IModel<T>, Serializable {
> >
> >     private val getterFunc: SerializableFunction0<T> =
> > SerializableFunction0(getter)
> >     private val setterFunc: SerializableFunction1<T> =
> > SerializableFunction1(setter)
> >
> >     override fun getObject(): T {
> >         return getterFunc.invoke()
> >     }
> >
> >     override fun setObject(value: T) {
> >         setterFunc.invoke(value)
> >     }
> >
> >     override fun detach() {
> >     }
> >
> >     private class SerializableFunction0<T>(private val function: () ->
> > T) : () -> T, Serializable {
> >         override fun invoke(): T = function()
> >     }
> >
> >     private class SerializableFunction1<T>(private val function: (T)
> > -> Unit) : (T) -> Unit, Serializable {
> >         override fun invoke(value: T) = function(value)
> >     }
> > }
> >
> > ALL not working , throws the same error
> >
> > Is there any way to solve this ?
> >
> > Thanks.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > For additional commands, e-mail: users-h...@wicket.apache.org
> >
> >
>
>
> --
> Best regards / Met vriendelijke groet,
>
> Johan Stuyts
> Squins IT Solutions BV
> Oranjestraat 30
> 2983 HS  Ridderkerk
> The Netherlands
> www.squins.com
> Chamber of commerce Rotterdam: 24435103
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to