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

179
Vistas
¿Cómo creo una expresión lambda desde una interfaz de Kotlin?

Tengo una interfaz simple de Kotlin:

 @FunctionalInterface interface ServiceMethod<T> { fun doService(): T }

Esto, a pesar del nombre, es esencialmente idéntico a la interfaz funcional Proveedor de Java. La única diferencia es que puedo implementar el proveedor y no puedo implementar el mío.

 val supplier = Supplier<String> { "Hello" } val serviceMethod = ServiceMethod<String> { "Hello" }

La implementación de ServiceMethod me da un error de compilación que dice "La interfaz ServiceMethod no tiene constructores". ¿Eh? ¡Por supuesto que no! Es una interfaz funcional.

Sé que puedo escribirlo como una clase interna anónima:

 val serviceMethod = object : ServiceMethod<String> { override fun doService(): String { return "Hello" } }

Pero esto es mucho más detallado. En este caso, solo podría usar la interfaz del proveedor, pero eso no funcionará para otras interfaces. No debería tener que escribir una interfaz en Java, solo para poder hacer una lambda en Kotlin. Prefiero usar una lambda para todas mis interfaces de Kotlin, especialmente porque escribiré muchas de ellas. ¿Me estoy perdiendo algo obvio?

over 4 years ago · Hanz Gallego
1 Respuestas
Responde la pregunta

0

Usa el fun modificador de interfaz desde Kotlin 1.4

En Kotlin 1.3 y versiones anteriores, las conversiones SAM (método abstracto único), en las que puede crear una instancia de una interfaz como Supplier mediante una función lambda, solo se admitían para las interfaces de Java.

Los diseñadores del lenguaje originalmente pensaron que las conversiones SAM no serían útiles para las interfaces de Kotlin, porque una función de Kotlin ya tiene un tipo . Por ejemplo, el tipo de su función doService se puede escribir como () -> T En lugar de crear un objeto que implemente una interfaz, simplemente podría escribir:

 val serviceMethod: () -> String = { "Hello" }

Kotlin 1.4 agrega conversiones SAM para las interfaces de Kotlin , pero no funciona de inmediato para todas las interfaces. En su lugar, debe aplicar el modificador de fun especial a una interfaz de Kotlin para que sea elegible para la conversión de SAM.

En tu ejemplo, simplemente se vería así:

 fun interface ServiceMethod<T> { fun doService(): T }

Con el modificador agregado, puede crear una instancia usando una lambda exactamente como esperaba en su pregunta.

 val serviceMethod = ServiceMethod<String> { "Hello" }

Puede obtener más información en la documentación de Kotlin para interfaces funcionales .

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