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.

  • Kotlin se establece en nulo si no es nulo
  • ¿Cómo evito expresiones de objects para funciones que devuelven una interfaz SAM?
  • Diseño sintético y personalizado de Kotlin en DialogFragment
  • Error al hacer que Enum sea la key principal en la biblioteca de la database de la sala
  • Método de extensión de Kotlin como alias para el nombre de método largo?
  • ¿Por qué la configuration de OnClickListener funciona una vez?
  • La aplicación se bloquea al girar la pantalla
  • La versión de kotlin que se utiliza para comstackr con gradle (1.1.2-5) difiere de la que se incluye en el complemento IDE (1.1.2-4)
  • El reino no genera classs RealmProxy en el proyecto Java / Kotlin cuando se usa kapt
  • Constructor de objects y Delegates.notNull
  • Carga concurrente de files S3 a través de Koutlin Coroutines