Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

505
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda