Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

282
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda