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

277
Visualizações
¿Qué es un constructor en línea en Kotlin?

En primer lugar, tengo que aclarar que no estoy preguntando qué es una función en línea o qué es una clase en línea. No hay ninguna parte en la documentación o especificación del lenguaje Kotlin que haga referencia a un constructor en línea, pero si observa la fuente Arrays.kt , verá esta clase: ByteArray tiene un constructor en línea:

 /** * An array of bytes. When targeting the JVM, instances of this class are represented as `byte[]`. * @constructor Creates a new array of the specified [size], with all elements initialized to zero. */ public class ByteArray(size: Int) { /** * Creates a new array of the specified [size], where each element is calculated by calling the specified * [init] function. * * The function [init] is called for each array element sequentially starting from the first one. * It should return the value for an array element given its index. */ public inline constructor(size: Int, init: (Int) -> Byte)

Consideremos que queremos crear una clase similar, algo como esto:

 public class Student(name: String) { public inline constructor(name: String, age: Int) : this(name) }

Si intenta crear esa clase en Kotlin y escribe un constructor en línea para ella, verá que es imposible y IDE se refiere a este error:

El modificador 'en línea' no es aplicable a 'constructor'

Entonces, recapitulemos, ¿cómo es correcta la definición de ByteArray ?

over 4 years ago · Hanz Gallego
1 Respostas
Responde à pergunta

0

La declaración de ByteArray que está viendo no es real, es un tipo llamado integrado. Esta declaración existe por conveniencia, pero nunca se compila verdaderamente en un binario. (De hecho, en la JVM, las matrices son especiales y no tienen archivos de clase correspondientes en ninguna parte).

Este constructor está marcado en línea porque en la práctica el compilador emite el código correspondiente a lo que sería su cuerpo en cada sitio de llamada. Toda la verificación del sitio de llamadas se realiza en consecuencia (el argumento lambda se trata de tal manera que el compilador sabe que se inclinará).

La inserción de constructores no es posible para las clases de usuario, por lo que el modificador inline está prohibido en el código de usuario.

over 4 years ago · Hanz Gallego 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