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

501
Views
Qué tipo de Kotlin usar para el valor lateinit Int

Kotlin no permite esto:

 private lateinit var port: Int;

¿Qué puedo usar para marcar un valor entero como permitir lateinit?

Entiendo por qué esto no funciona (Int es primitivo), ¿necesito saber qué usar en su lugar ?

Editar 1

No es un duplicado de esto porque quiero saber qué usar en este caso, no por qué sucede: ¿Por qué Kotlin no permite usar lateinit con tipos primitivos?

Editar 2 Según lo sugerido por @Roland a continuación: BitInteger funciona para mí:

 private lateinit var port: BigInteger;

Solo lo estoy usando para generar una URL, así que realmente solo lo necesito en una concatenación de cadenas.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Algunas variantes me vienen a la mente, pero dependiendo de cómo lo uses más adelante, ninguna puede ser adecuada para ti.

  1. simplemente use un valor predeterminado, por ejemplo:

     var port : Int = 8080
  2. use algún otro tipo de Number en lugar de Int , por ejemplo

     class Server { lateinit var port : Number }

    Luego puede llamar a port.toInt() si lo necesita. Pero: hay muchos tipos de Number , por lo que reducirlo a, por ejemplo, BigInteger podría tener sentido. De lo contrario, podría obtener objetos que no desea aceptar en primer lugar.

  3. usando Delegates.notNull

     var port : Int by Delegates.notNull()

    pero: a pesar de que ahorra su valor null , no puede verificar si la variable se ha inicializado, por lo que solo tiene que lidiar con una excepción tan pronto como quiera acceder a ella ... no es muy agradable, creo. .. pero si está seguro de obtener un valor, entonces eso también podría estar bien para usted.

  4. solo usa Int? y omita el lateinit , por ejemplo:

     class Server { var port : Int? = null }

    En lugar de ::port.isInitialized , solicitaría port != null , pero: necesita manejar el posible valor null ahora, pero con ? eso no debería ser un gran problema.

  5. utilizar Int? con Delegates.vetoable en caso de que no quiera aceptar valores null después de obtener su primer valor, haciéndolo básicamente algo así como lateinit ;-)

     class Server { var port : Int? by Delegates.vetoable(null as Int?) { _, _, newValue -> newValue != null } }

    y verifique nuevamente usando port != null , que ahora se comporta de manera similar a ::port.isInitialized

No es que sea un gran admirador de los dos últimos, ya que presentan null nuevamente, pero dependiendo de lo que hagas, podría estar perfectamente bien...

A medida que agregó algo sobre la concatenación de String , ¿usaría aún más Int? aquí. Entonces todavía puedes usar algo como:

 url = "$host${port?.let { ":$it" }?:""}" // or: url = port?.let { "$host:$it" } ?: host // or url = listOfNotNull(host, port).joinToString(":")

Lo mismo no puede ser realmente más fácil con ::port.isInitialized ?

over 4 years ago · Santiago Trujillo Report

0

No sé cuál es la solución perfecta que está buscando, pero lo hago así (en caso de que se vea obligado a usar un tipo primitivo):

 class Example{ private var _port: Int? = null var port:Int get() = this._port!! set(i) { _port = i } }

Al menos esto le permite usar la propiedad como si no fuera anulable. ¡La mejor solución que encontramos para nosotros hasta ahora!

over 4 years ago · Santiago Trujillo Report

0

Si su proyecto no es multiplataforma, la solución obvia sería

 @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") lateinit var i: java.lang.Integer

que tiene una correspondencia uno a uno con los valores Int (a diferencia de BigInteger ).

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!