| // TARGET_BACKEND: JVM | |
| // WITH_STDLIB | |
| // ISSUE: KT-55138 | |
| interface Operation { | |
| fun exec(input: Long): Long | |
| } | |
| class Add(private val addValue: Long) : Operation { | |
| override fun exec(input: Long): Long { | |
| return input + addValue | |
| } | |
| } | |
| class Squared : Operation { | |
| override fun exec(input: Long): Long { | |
| return input * input | |
| } | |
| } | |
| fun test(op: String, x: Long): Long { | |
| var result = 0L | |
| listOf(1L).forEach { | |
| val operation2 = when (op) { | |
| "*" -> { | |
| Squared()::exec | |
| } | |
| "+" -> { | |
| Add(42)::exec | |
| } | |
| else -> { | |
| throw IllegalArgumentException("Unexpected op: $op") | |
| } | |
| } | |
| result = operation2(x) | |
| } | |
| return result | |
| } | |
| fun box(): String { | |
| val result = test("+", 4L) | |
| return if (result == 46L) "OK" else "Error: $result" | |
| } |