Cómo crear un constructor vacío para la clase de datos en Kotlin Android
Tengo 10 + parámetro en una clase de datos, quiero inicializar la clase de datos con el constructor vacío y establecer los valores sólo para unos pocos parámetros utilizando 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:
- Android Kotlin: java.lang.NoClassDefFoundError: Resolución fallida de: <KotlinObject>
- Objetos complementarios en las interfaces Kotlin
- WeakReference no funciona en Kotlin
- La biblioteca de Kotlin 'classes.jar' tiene un formato no soportado. Actualice la biblioteca o el complemento
- Uso de la función "con"
//Something like this will be easy val activity = Activity(); //but it needs all the parameters activity.title = "New Computer" sendToServer(activity) //It requires all the paraments, How to avoid this and use something like above code val activity = Activity(null,null,null,null,null,"New Computer",null,null,null,null); sendToServer(activity)
- Sala de Android: Cada variable de enlace en la consulta debe tener un método de coincidencia
- ¿Es Kotlin 100% compatible con ART en Android?
- Proyecto Android de Kotlin falló al sincronizar el Proyecto Gradle
- Referencia sin resolver DaggerApplicationComponent
- Uso de Kotlin en un módulo de biblioteca sin utilizarlo en el módulo de aplicaciones
- FragmentTransaction ocultar / mostrar no funciona a veces
- Kotlin - ¿Cómo decidir entre "lateinit" y "variable anulable"?
- Error: Error en la ejecución de la tarea ': app: clean'. No se puede eliminar el archivo
Usted tiene 2 opciones aquí:
-
Asigne un valor predeterminado a cada parámetro del constructor principal :
data class Activity( var updated_on: String = "", var tags: List<String> = emptyList(), var description: String = "", var user_id: List<Int> = emptyList(), var status_id: Int = -1, var title: String = "", var created_at: String = "", var data: HashMap<*, *> = hashMapOf<Any, Any>(), var id: Int = -1, var counts: LinkedTreeMap<*, *> = LinkedTreeMap<Any, Any>() )
-
Declare un constructor secundario que no tiene parámetros:
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<*, *> ) { constructor() : this("", emptyList(), "", emptyList(), -1, "", "", hashMapOf<Any, Any>(), -1, LinkedTreeMap<Any, Any>() ) }
Si usted no confía en la copy
o los equals
de la clase de la Activity
o no utiliza los métodos autogenerated de data class
en todos que usted podría utilizar la clase regular como así:
class ActivityDto { var updated_on: String = "", var tags: List<String> = emptyList(), var description: String = "", var user_id: List<Int> = emptyList(), var status_id: Int = -1, var title: String = "", var created_at: String = "", var data: HashMap<*, *> = hashMapOf<Any, Any>(), var id: Int = -1, var counts: LinkedTreeMap<*, *> = LinkedTreeMap<Any, Any>() }
No todos los DTO tiene que ser una data class
y viceversa. De hecho, según mi experiencia, considero que las clases de datos son particularmente útiles en áreas que implican una lógica de negocio compleja.
Crear una clase seguida por la palabra clave data y crear un constructor por defecto
Clase de datos Elemento (nombre de valor: Cadena, dirección de val: Cadena)