Kotlin Koans 08 Smart casts

Smart casts (Playground)


Rewrite the following Java code using smart casts and when expression:

次のJavaコードを スマートキャストwhen式 を使用して書き換えてください。

public int eval(Expr expr) {
if (expr instanceof Num) {
return ((Num) expr).getValue();
if (expr instanceof Sum) {
Sum sum = (Sum) expr;
return eval(sum.getLeft()) + eval(sum.getRight());
throw new IllegalArgumentException("Unknown expression");


fun eval(expr: Expr): Int =
when (expr) {
is Num -> expr.value
is Sum -> eval(expr.left) + eval(expr.right)
else -> throw IllegalArgumentException("Unknown expression")

interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Expr, val right: Expr) : Expr

← Blog