为啥看似明确的类型提示构造函数调用存在“没有匹配的 ctor”?
Posted
技术标签:
【中文标题】为啥看似明确的类型提示构造函数调用存在“没有匹配的 ctor”?【英文标题】:Why is there "No matching ctor" for seemingly unambiguous type-hinted constructor call?为什么看似明确的类型提示构造函数调用存在“没有匹配的 ctor”? 【发布时间】:2021-05-10 16:42:52 【问题描述】:使用 Clojure 中的 Netty,以下理论上明确的构造函数调用无法解析,无论是在 Cursive(它错误地列出了用于消歧的两个 3 元选项)和 REPL(它抛出 IllegalArgumentException
No matching ctor)。未提示的版本也以同样的方式失败。
(DefaultFullHttpResponse. protocol status ^ByteBuf buffer)
可用的构造函数签名是:
HttpVersion HttpResponseStatus HttpVersion HttpResponseStatus ByteBuf ← 由 arity + 单一类型提示明确标识 HttpVersion HttpResponseStatus 布尔值 HttpVersion HttpResponseStatus boolean boolean HttpVersion HttpResponseStatus ByteBuf 布尔值 HttpVersion HttpResponseStatus ByteBuf boolean boolean HttpVersion HttpResponseStatus ByteBuf HttpHeaders HttpHeaders为什么?
【问题讨论】:
你会发布一个完整的、最小的项目(总共可能有十几行),用它来重现问题吗?您分享了一个有点蛮力的解决方案,但对原始问题的回答会很有启发性。 【参考方案1】:我也可以通过“冗余”提示第一个参数来实现此功能:
(DefaultFullHttpResponse. ^HttpVersion protocol status ^ByteBuf buffer)
这太令人惊讶了!
【讨论】:
以上是关于为啥看似明确的类型提示构造函数调用存在“没有匹配的 ctor”?的主要内容,如果未能解决你的问题,请参考以下文章