https://kotlinlang.org logo
Title
p

Paul Woitaschek

06/06/2019, 12:56 PM
kotlin
interface Greeter {
  fun greet()
}

class HappyGreeter : Greeter {
  override fun greet() {
    println("hello :)")
  }
}

class SadGreeter : Greeter {
  override fun greet() {
    println("hello :(")
  }
}

class GreeterDelegate (val greeters : List<Greeter>): Greeter by greeters
d

diesieben07

06/06/2019, 12:59 PM
How would this even work? What if
greet
returns something?
m

marstran

06/06/2019, 12:59 PM
What would the
greet
function do in
GreeterDelegate
? Call
greet
on all elements of
greeters
?
p

Paul Woitaschek

06/06/2019, 1:00 PM
@diesieben07 Right, didn't think of this. My use case is that for analytics I have an interface with multilpe functions for tracking. Now I want to have multiple implementations of that interface for different providers (google analytics, firebase analytics for example)
Hm, this will do:
class GreeterDelegate(val greeters: List<Greeter>) {

  fun execute(action: Greeter.()->Unit) {
    greeters.forEach {
      action(it)
    }
  }
}

fun test(delegate: GreeterDelegate) {
  delegate.execute(Greeter::hello)
}
k

kralli

06/06/2019, 1:16 PM
Btw how do paste a Snippet here? It only lets me paste it in the channel.
k

karelpeeters

06/06/2019, 1:19 PM