首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Dart中,超级和这个有什么区别?

在Dart中,超级和这个有什么区别?
EN

Stack Overflow用户
提问于 2021-04-11 15:22:58
回答 1查看 40关注 0票数 0

最小可复制代码:

代码语言:javascript
运行
复制
void main() {
  const one = Foo();
  const two = Foo();
  print(one == two);
}

class Foo {
  const Foo();

  @override
  bool operator ==(Object other) {
    assert(super == this); // Works (Line - 1)
    return this == other; // Error (Line - 2)
    // return super == other; // Works 
  }
}

断言工作为(Line - 1),但(Line - 2)失败时出现了以下错误。然而,return super == other也能工作。

Uncaught :最大调用堆栈大小exceededError: RangeError:最大调用堆栈大小超过

EN

Stack Overflow用户

回答已采纳

发布于 2021-04-11 16:17:46

首先,第1行可以工作,因为您使用的是来自==类的Object运算符,该操作符根据对象的地址确定相等。

在第2行,您将看到堆栈溢出(错误,而不是此网站),因为当您测试是否相等时,将调用==操作符,但当执行到达“第2行”时,您将再次调用==操作符,从而导致对==方法的递归调用。这会导致一个无限循环,用对==的调用填充您的调用堆栈,直到它溢出,从而导致您正在获得的错误。

在重载操作符时,superthis没有特殊的意义。它们的含义和以往一样。this引用当前对象。super引用父对象。(请记住,如果没有指定任何对象,则所有对象都有一个隐含的Object超类。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67046754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档