Kotlin: Interface ... n'ont pas de constructeurs
Je suis la conversion d'une partie de mon code Java de Kotlin et je ne comprends pas très bien comment instancier les interfaces qui sont définis dans Kotlin code. Comme un exemple, j'ai une interface (au sens défini dans le code Java):
public interface MyInterface {
void onLocationMeasured(Location location);
}
Et puis plus loin dans mon Kotlin code que j'ai instancier cette interface:
val myObj = new MyInterface { Log.d("...", "...") }
et il fonctionne très bien. Cependant, quand je convertir MyInterface de Kotlin:
interface MyInterface {
fun onLocationMeasured(location: Location)
}
Je reçois un message d'erreur: Interface MyListener does not have constructors
lorsque j'essaie d'instancier - mais il me semble que rien n'a changé à l'exception de la syntaxe. Dois-je mal comprendre la façon dont les interfaces de travail dans Kotlin?
Vous devez vous connecter pour publier un commentaire.
Votre code Java s'appuie sur SAM de conversion - conversion automatique d'un lambda dans une interface avec une seule méthode abstraite. SAM conversion est actuellement pas pris en charge pour les interfaces définies dans Kotlin. Au lieu de cela, vous devez définir un anonyme, un objet implémentant l'interface:
Location -> Unit
) au lieu d'une seule méthode interfaces si possible - est-ce exact?La meilleure solution est d'utiliser un typealias en place de votre interface Java
typealias MyInterface = (Location) -> Unit
Inscrire de cette façon:
ou même plus propre
De l'appeler comme ceci:
Les 3 options actuelles semblent être:
Lors de la conversion de nos bibliothèques de Kotlin, nous avons laissé toutes les interfaces en Java code, tel qu'il était plus propre à l'appel de Java à partir de Kotlin de Kotlin de Kotlin.
si vous avez classe Java comme ceci :
il est recommandé de convertir ce code de Java à Kotlin comme ceci :
convertir Interface Java :
à Kotlin Interface Style:
Essayez d'accéder à votre interface comme ceci :