void Function(int) 不是 void Function(dynamic) 的有效重写

2024-03-02

class Parent<T> {
  void method(T t) {}
}

class Child extends Parent {
  @override
  void method(int i) {} // error: mentioned_below

  void takesDynamic(dynamic d) {
    takesType(d); // no error
  }

  void takesType(int i) {
    takesDynamic(i); // no error
  }
}

Error:

void Function(int) 不是 void Function(dynamic) 的有效重写

当我可以轻松通过的时候int to dynamic在方法参数中反之亦然,为什么当我重写方法时会看到错误。


PS:

我不是在寻找使用的解决方案extends Parent<int>并让它工作,我想知道为什么当我重写一个方法与调用常规方法时,事情会受到不同的对待。


void Function(int x)通常不是有效的覆盖void Function(dynamic x)因为int版本不能替代dynamic版本。

允许的输入是什么void Function(dynamic)(类型Parent<dynamic>.method)? Anything.

允许的输入是什么void Function(int)(类型Child.method)?仅有的ints.

因此,这种超越可能违反合同Parent<dynamic>的界面。 (例如,如果您有一个实例,该怎么办?Child并将其传递给期望的东西Parent<dynamic>,然后调用method('not an int') on it?)

(请注意,这并不特定于方法覆盖。一般来说,在需要采用较宽类型的函数的地方,不能使用采用较窄类型的函数,即使较窄的类型源自较宽的类型。)

Dart 确实允许您使用covariant keyword https://dart.dev/guides/language/sound-problems#the-covariant-keyword抑制静态类型错误并显式允许覆盖,但请注意,这样做不一定是类型安全的,并且您将负责确保在运行时不会出现类型错误。

进一步阅读:维基百科的协变和逆变(计算机科学) https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)#Covariant_method_parameter_type

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

void Function(int) 不是 void Function(dynamic) 的有效重写 的相关文章

随机推荐

  • 数据绑定到实现 IEnumerable 的对象的属性

    我正在尝试对对象的实例进行简单的数据绑定 像这样的东西 public class Foo INotifyPropertyChanged private int bar public int Bar snip code to get set
  • 如何自动启动所需的服务和应用程序?

    我正在编写我的第一个 erlang 应用程序 我想按照在 erlang 生态系统中应该完成的方式做事 我的应用程序依赖于已启动的 ssl inets 服务和 log4erl 应用程序 目前我在 erlang shell 中手动启动它们 之后
  • WPF MVVM prism 中的 ASP.net 类似基于表单的身份验证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在开发 WPF MVVM prism 应用程序后 我想实现身份验证 因为它是基于 ASP NET 表单的身份验证 我想限制用户进入需要授权
  • 支持不可变类的 ORM

    哪个 ORM 支持以下领域模型不可变的 types 我想编写如下所示的类 或 Scala 等效项 class A private final C c not mutable A B b init c A doSomething B b bu
  • 更新由另一个减速器管理的状态

    在我的 React 应用程序中 我的appReducer管理全局内容 例如通知 用户信息等 应用程序中的模块之一是库存模块 它有自己的减速器 即inventoryReducer 在 redux 商店中 我组合了所有减速器 当用户输入库存时
  • FactoryGirl 创建用户,但保存点在测试开始前被释放

    我正在为spec requests user pages specs运行rspec测试 require spec helper describe User pages do subject page describe home page d
  • 我可以从 Chrome 扩展程序访问站点的 localStorage 吗?

    我的 chrome 扩展有两种状态 1 某些站点在localStorage 另一个域 中有身份验证数据 所以我必须显示主窗口 2 没有身份验证数据 因此我必须显示带有登录名和密码表单的窗口 为了定义是否提供身份验证数据 我想检查他的 loc
  • 如何使用pdfkit ios 11打开pdf文件?

    我正在尝试使用新的 iOS 11 框架 pdfkit 打开 PDF 文件 但我无法做到这一点 所以帮助我使用 pdfkit 框架打开文件 先感谢您 这是基于 Objective C 的示例 Ensure PDFKit framework i
  • 推送通知警报文本的最大长度是多少?

    iOS 推送通知的警报文本的最大长度是多少 The 文档 https developer apple com go id push notifications指出通知有效负载总共必须低于 256 字节 https developer app
  • PWA 的推送通知或 Web 推送通知

    首先 我想说我一直在研究推送通知和网络通知 但我有点困惑 我从这里读到 PWA 的推送通知不适用于 Safari 上的 iOS iPhone 从 PWA 向 iOS 发送推送通知 https stackoverflow com questi
  • 如何拥有一个写入服务总线队列的异步函数?

    使用 Azure WebJobs SDK 我想创建一个异步函数 该函数将接收 ServiceBus 队列输入并写入 ServiceBus 队列输出 异步方法不能有 out 参数 例如在 BlobStorage 上 似乎可以通过使用 Stre
  • 解析 nmap 结果

    我正在 Linux 上使用 Python 2 6 开发一个项目 我在终端使用 nmap 来获取这些扫描结果 我在一个字符串中得到了这个结果 Starting Nmap 6 47 http nmap org at 2015 06 28 23
  • 创建 AMI 需要很长时间

    我正在为具有 100G 文件的服务器创建 AMI 已经过去一个多小时了 事情还没有结束 AMI 仍然显示待处理 有什么问题吗 我应该怎么办 只是为了让其他人知道 这个过程可能需要非常非常长的时间 我的 100 GB AMI 大约需要 2 5
  • Excel 2010:查找两个日期时间之间的秒数

    我有一个专栏Cal Date time 其中包含通话的日期和时间 如下所示 A B C D Number Call Date Time Duration in Sec 123 2010 01 10 01 07 24 465000 123 2
  • Android 中应用程序“资产”文件夹的路径是什么?

    我正在开发一个 Android 应用程序 希望在 apk 中捆绑一个视频文件 mp4 以便在启动应用程序时我可以播放简短的介绍视频 不幸的是 我无法弄清楚应该将该视频文件放置在项目文件夹中的哪个位置 以及如何访问它 文件的路径 我在用vid
  • Pandas:iterrow 循环的替代方案

    我有一个在 pandas 中运行的小函数 当我运行时会抛出 ValueErrorif x in y陈述 我看到了类似的问题 建议使用布尔索引 isin and where 但我无法将任何示例适应我的情况 任何建议将非常感激 附加说明 gro
  • jQuery :包含 html

    我有一个表 其中包含逗号分隔的数字列表 如下所示 td 72 76 81 td 我正在尝试选择表格单元格don t包含特定的数字 该选择器有效 td not contains 76 table 问题是可能存在包含 576 或 761 等的行
  • 如何编写无分支 std::vector 扫描?

    我想对数组编写一个简单的扫描 我有一个std vector
  • CouchDB 视图:MapReduce 中可以接受多少处理?

    我一直在尝试使用 CouchDB 进行 MapReduce 一些示例显示了映射归约函数中可能存在的一些繁重逻辑 在一种特殊情况下 他们在映射内执行 for 循环 在发出您选择的文档之前 MapReduce 是否会在每个可能的文档上运行 如果
  • void Function(int) 不是 void Function(dynamic) 的有效重写

    class Parent