Llamar a "super (prototipo)" de Java en una class abierta de DTO de datos de Kotlin

Tengo una class de Kotlin, similar a

data open class MyDto ( var property: String? = null // ... ) 

y una class Java que extiende esta class, similar a

 class MySpecificDto extends MyDto { private String field; // getter/setter for "field" public MySpecificDto(final MyDto prototype) { super(prototype); } } 

¿Qué falta en el DTO de Kotlin para la statement "super (prototipo)" para comstackr?

El constructor de MyDto toma un solo parámetro de tipo String, y está intentando pasarlo a MyDto .

Creo que estás buscando –

 super(prototype.getProperty()); 

Las classs de datos parecen una base lógica similar para una jerarquía de DTO. Lamentablemente, no juegan bien con la inheritance, por lo que no es una buena idea. Vea esta respuesta .

Actualizar a comentario de la dirección –

Para una solución lateral de Kotlin, debe recordar que las classs de Kotlin solo permiten un solo constructor. Para las classs de datos, el formatting de ese constructor ya está definido, por lo que no puede simplemente pasar un object y hacer que funcione, o definir un constructor diferente. Además, como señaló @bashor en el comentario a su pregunta original, no hay un constructor de copys. Sin embargo, puede crear una function separada para inicializar su object si lo desea:

 data open class MyDto (var property: String? = null //...) { fun init(dto: MyDto) { property = dto.property //... rest of the properties } } 

y en tu constructor de Java llama a init lugar de super .

 public class MySpecificDto extends MyDto { private String field; public MySpecificDto(final MyDto prototype) { init(prototype); } } 

La advertencia sobre esta solución es que su class de datos debe proporcionar valores pnetworkingeterminados para todas sus properties porque hay una llamada implícita al constructor con cero parameters.

  • Manejando una tarea después de un Fragmento de Cargas
  • Intento de migrar en canario 5
  • Kotlin coroutines unit testing usando mockito
  • Más diversión con los delegates de Kotlin
  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • ¿Por qué tengo que devolver Unit.INSTANCE al implementar en Java una function Kotlin que devuelve una Unidad?
  • ActivityTestRule.getActivity devuelve nulo en el método Before
  • Kotlin sintético en adaptador o ViewHolder
  • tornadoFX togglebutton no tiene propiedad de text
  • ¿Por qué nunca se llama a createView?
  • La creación de la aplicación Kotlin falló debido a "No se pudo inicializar la class com.intellij.ide.highlighter.JavaFileType"