Kotlin Как вызвать метод, переданный в качестве параметра - PullRequest
2 голосов
/ 30 сентября 2019

в javasript, если мы знаем имя метода, мы можем передать его в качестве параметра и вызвать его так:

function foo(methodName){
	methodName()
}

function doSomething(){
	console.log("DO Something")
}
foo(doSomething)

Я хочу сделать что-то подобное в kotlin, подумайте, у меня есть такой класс

Class DataModel{}
Class Foo (){
    fun build(data:DataModel,val onThis:AnyMethod){
        if(data.size>0){
            val param = somevalue
            onThis(param)
        }
    }
}

, тогда в моей деятельности, например, у меня есть doThisметод

class MainActivity : AppCompatActivity(){
    //rest of code
    fun doThis(param:Int){
        Log.e("DO","THIS ${param}")
    }
}

в моем OnCreateView я хочу вызвать что-то вроде этого

val a= new Foo()
a.build(data, doThis)

Чтобы сделать это, каким должен быть мой класс Foo?

1 Ответ

4 голосов
/ 30 сентября 2019

Измените val onThis:AnyMethod на onThis: (Int) -> Unit, то есть так:

class Foo {
    fun build(data: DataModel, onThis: (Int) -> Unit) {
        if (data.size > 0) {
            val param = somevalue
            onThis(param)
        }
    }
}

Тогда вы можете сделать это

// val mainActivity: MainActivity = ...

val a = Foo()
a.build(data, mainActivity::doThis)

или, если вы запустите этот код изнутрифункция-член MainActivity:

val a = Foo()
a.build(data, ::doThis)

Более подробную информацию о том, как передавать функции lambdas / functions / member, можно найти в официальной документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...