La reflexión del constructor de Java arroja una exception con classs selladas

Tengo la siguiente class sellada en un proyecto de Kotlin:

sealed class Test { abstract val test: String @NoArg data class Test1( override val test: String ) : Test() @NoArg data class Test2( override val test: String ) : Test() } 

La anotación @NoArg es un marcador y el comstackdor está configurado para generar un constructor sin arguments para estas classs.

Mi problema es que tratar de crear Test1 instancia de Test1 y Test2 utilizando los resultados de la reflexión de Java en la siguiente exception:

 Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at MainKt.main(Main.kt:27) Caused by: java.lang.IllegalAccessError: tried to access method Test.<init>()V from class Test$Test1 at Test$Test1.<init>(Main.kt) ... 5 more 

Inicialmente encontré este problema al intentar cargar instancias de estas classs desde una database de Mongo usando Spring Data Mongo.

El código que utilicé para crear una instancia durante esta testing es el siguiente:

 val javaConstructor = Test.Test1::class.java.getConstructor() ?: error("Did not find constructor") val instance = javaConstructor.newInstance() 

Mi solución actual es simplemente no usar una class sellada que resuelva la exception. ¿Hay alguna manera de mantener la class sellada y hacer que la reflexión de Java funcione correctamente? No creo que este sea el comportamiento previsto, pero tal vez hay algún tipo de razón para esto? Si es así, me interesaría saber de qué se trata.

Tengo un ejemplo de mi problema aquí: https://github.com/mhlz/playground