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

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

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 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