Pablo
05/25/2021, 12:50 PMinterface StringProvider {
operator fun get(key: String): String
fun getString(key: String): String
....
}
And I have a class that contains the key but can not add this StringProvider
dependency how can I add this block to the constructor so I can get the key?
class Foo {
....
var age: String
var weigh: String
fun getExample(provider: (String) -> String) : Foo {
age = provider["ageprovider"]
weigh = provider["weighprovider"]
}
}
So in my class that I have a object of StringProvider
I send just the StringProvider
Roukanken
05/25/2021, 1:01 PMfun getExample(getString: (String) -> String) : Foo {
age = getString("ageprovider")
weigh = getString("weighprovider")
}
and then use it like
foo.getExample { stringProvider[it] }
Roukanken
05/25/2021, 1:03 PM(String) -> String
function
if you can change Provider, might be good to let it implement (String) -> String
too, so you could just do foo.getExample(provider)
Pablo
05/25/2021, 1:04 PMclass Foo (val id: String, getString :(String)->String,onClick: (View) -> Unit)
Pablo
05/25/2021, 1:04 PMRoukanken
05/25/2021, 1:05 PMgetString(str)
Roukanken
05/25/2021, 1:07 PMPablo
05/25/2021, 1:07 PMPablo
05/25/2021, 1:08 PMPablo
05/25/2021, 1:08 PMif you can change Provider, might be good to let it implementtoo, so you could just do(String) -> String
foo.getExample(provider)
Roukanken
05/25/2021, 1:11 PMinterface StringProvider: (String) -> String {
operator fun get(key: String): String
fun getString(key: String): String
override operator fun invoke(key: String): String = get(key)
}
now every StringProvider will be also a lambda of (String) -> String
so you could write Foo(id, provider, {click.invoke()})
instead of what you wrote
(and yes it looks ok, as far as I can see)
ofcourse do this implementation only if it makes sense in your domainRoukanken
05/25/2021, 1:13 PM(String) -> String
- as functions are proper types (or interfaces? I think interfaces) in Kotlin, you can use them as super types - the invoke operator is overriding the one defined in (String) -> String
)Pablo
05/25/2021, 1:15 PMRoukanken
05/25/2021, 1:17 PMfun hasProvider(provider: StringProvider) {
cantHaveProvider(provider)
}
fun cantHaveProvider(getString: (String) -> String) {
getString("test")
}