gpt4 book ai didi

kotlin - kotlin中接口(interface)引用如何访问类方法和变量

转载 作者:行者123 更新时间:2023-12-02 11:49:41 24 4
gpt4 key购买 nike

我不确定作为接口(interface)引用的expr如何调用Num类变量中声明的变量。我正在通过 kotlin Koans 学习它。有人可以解释一下吗?

  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) : Exp

最佳答案

首先,当你声明一个类时:

class Num(val value: Int) : Expr

这意味着类Num实现接口(interface)Expr。这意味着 Num 的任何实例都可以用作 Expr 的实例,因此函数 eval 可以接收 Num< 的实例 作为参数。

when 运算符中,您检查用于创建实例 exprExpr 的实际实现。当 expr 的实际类型为 Num 时,会调用分支 is Num ->,因此 Kotlin 会自动识别该分支中的 exprNum 的实例,因此您可以使用 Num 类的属性。这个 Kotlin 功能称为 smart cast .

关于kotlin - kotlin中接口(interface)引用如何访问类方法和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59961383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com