Estou convertendo parte do meu código Java para Kotlin e não entendo como instanciar interfaces definidas no código Kotlin. Como exemplo, eu tenho uma interface (definida no código Java):
public interface MyInterface {
void onLocationMeasured(Location location);
}
E depois, no meu código Kotlin, instanciamos essa interface:
val myObj = new MyInterface { Log.d("...", "...") }
e funciona bem. No entanto, quando eu converter MyInterface em Kotlin:
interface MyInterface {
fun onLocationMeasured(location: Location)
}
Recebo uma mensagem de erro: Interface MyListener does not have constructors
quando tento instancia-lo - embora me pareça que nada mudou, exceto a sintaxe. Entendo mal como as interfaces funcionam no Kotlin?
Location -> Unit
) em vez de interfaces de método único, se possível - está correto?A melhor solução é usar uma tipealias no lugar da sua interface Java
typealias MyInterface = (Location) -> Unit
Registre-o assim:
ou até mais limpo
Invoque-o assim:
As três opções atuais parecem ser:
Ao converter nossas bibliotecas para o Kotlin, deixamos todas as interfaces no código Java, pois era mais fácil chamar Java do Kotlin do que Kotlin do Kotlin.
fonte
Tente acessar sua interface assim:
fonte
se você tiver classe Java como esta:
você deve converter esse código do Java para o Kotlin desta forma:
converter interface Java :
ao estilo de interface Kotlin :
fonte
Se a interface for para um método de ouvinte de uma classe, altere a definição da interface para o tipo de função. Isso torna o código mais conciso. Veja o seguinte.
Classe que contém a definição de ouvinte
Outra classe
fonte
fonte