Tengo más de 10 parámetros en una clase de datos, quiero inicializar la clase de datos con un constructor vacío y establecer los valores solo para algunos parámetros usando setter y pasar el objeto al servidor.
data class Activity(
var updated_on: String,
var tags: List<String>,
var description: String,
var user_id: List<Int>,
var status_id: Int,
var title: String,
var created_at: String,
var data: HashMap<*, *>,
var id: Int,
var counts: LinkedTreeMap<*, *>,
)
Uso:
Algo como esto será fácil
val activity = Activity();
activity.title = "New Computer"
sendToServer(activity)
Pero requiere que se pasen todos los argumentos mientras se crea el constructor. ¿Cómo puedo simplificar como arriba?
val activity = Activity(null,null,null,null,null,"New Computer",null,null,null,null);
sendToServer(activity)
copy
necesita una instancia de clase de datos. Para crearlo, debe invocar un constructor, y aquí estaba el problema.emptyList
no asignará memoria repetidamente. Devuelve un singleton .Si proporciona valores predeterminados a todos los campos , Kotlin genera automáticamente un constructor vacío.
y simplemente puedes llamar:
fuente
class FeelComChatMessage (messageText: String = "", messageUser: String = "")
Junto con la respuesta @miensol, permítanme agregar algunos detalles:
Si desea un constructor vacío visible en Java que use clases de datos, debe definirlo explícitamente.
Usar valores predeterminados + especificador de constructor es bastante fácil:
Esto significa que con este truco ahora puede serializar / deserializar este objeto con los serializadores Java estándar (Jackson, Gson, etc.).
fuente
Si le da un valor predeterminado a cada parámetro de constructor primario:
y desde la clase donde las instancias puedes llamarlo sin argumentos o con los argumentos que tienes en ese momento
fuente
Sugeriría modificar el constructor primario y agregar un valor predeterminado a cada parámetro:
También puede hacer que los valores sean anulables agregando
?
y luego puede evaluarnull
:En general, es una buena práctica evitar los objetos anulables: escriba el código de la forma en que no necesitemos usarlos. Los objetos no anulables son una de las ventajas de Kotlin en comparación con Java. Por lo tanto, la primera opción anterior es preferible .
Ambas opciones le darán el resultado deseado:
fuente
Constructor secundario no vacío para la clase de datos en Kotlin:
Constructor secundario vacío para la clase de datos en Kotlin:
fuente
De la documentación
fuente