为啥看似明确的类型提示构造函数调用存在“没有匹配的 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(它抛出 IllegalArgumentExceptionNo 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”?的主要内容,如果未能解决你的问题,请参考以下文章

构造函数中的“没有匹配的函数调用”

为啥此 C++ 代码中的构造函数不明确,我该如何解决?

为啥我的构造函数没有被调用?

C++:调用无参数的构造函数为啥不加括号

java中的构造方法和普通方法

c++虚函数问题,大神请进