Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

757
Views
Los tipos solo pueden contener un constructor @Inject

Modelo de datos

 data class AuthDataModel @Inject constructor( var username: String = "", var password: String = "", var mobileData: String = "

Explicación

Estoy tratando de inyectar el modelo de datos de autenticación en el modelo de vista de autenticación en kotlin, pero no se compila con el mensaje ("Los tipos solo pueden contener un constructor @Inject)

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Moviendo mi comentario a una respuesta:

Si tiene un constructor con argumentos predeterminados, Kotlin en realidad genera constructores adicionales. En su caso, tiene un constructor de 3 argumentos donde todos son opcionales, lo que genera un total de 4 constructores. Aparentemente, Kotlin también asocia cualquier anotación en el constructor principal con todas las generadas, lo que significa que terminó con 4 constructores @Inject .

Tienes dos opciones:

El primero, como usted mismo mencionó, elimina todos los valores predeterminados. Si no hay valores predeterminados, solo se genera un constructor con la anotación.

Alternativamente, también puede crear constructores adicionales usted mismo y señalarlos al primario. Esto también le permitiría especificar manualmente solo uno para tener la anotación @Inject , mientras que los demás no. Básicamente:

 data class AuthDataModel @Inject constructor( var username: String, var password: String, var mobileData: String) { constructor(username: String) : this(username, "", "") {} constructor(username: String, password: String) : this(username, password, "") {} }

No usar los valores predeterminados evita que se generen múltiples constructores @Inject , y los constructores secundarios deben mantener todo funcionando como se espera. Básicamente, esto es sobrecargar el constructor, y es equivalente a lo que haría en Java cuando ciertas variables son opcionales. Por lo tanto, debería estar bien.

1: Hace tiempo que no uso Android y nunca usé @Inject. Si la opción 2 no funciona (como en @Inject no lo permite, o no funciona como se esperaba, etc.), eso solo deja la opción 1 y requiere que todos los parámetros se pasen explícitamente. Sin embargo, los constructores secundarios que llaman al constructor principal deberían ser suficientes para mantener todo funcionando.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!