kqr
04/03/2021, 12:26 PMYoussef Shoaib [MOD]
04/03/2021, 12:33 PMfun main() {
Command1Handler().execute(Command1())
Command1Handler().execute(Command2())
val commandA: Command = Command1()
val commandB: Command = Command2()
Command1Handler().execute(commandA)
Command1Handler().execute(commandB)
}
interface Command
interface CommandHandler<T> where T : Command {
fun execute(command: T)
}
class Command1 : Command
class Command2 : Command
class Command1Handler: CommandHandler<Command> {
override fun execute(command: Command) {
println("used supertype command")
when(command) {
is Command1 -> execute(command)
is Command2 -> execute(command)
else -> throw IllegalArgumentException()
}
}
fun execute(command: Command1) = println("Executing ${command.javaClass.simpleName}")
fun execute(command: Command2) = println("Executing ${command.javaClass.simpleName}")
}
kqr
04/03/2021, 1:10 PMAlexis Manin
04/03/2021, 2:09 PMTomasz Krakowiak
04/03/2021, 2:34 PM