java - 对可变参数方法的模糊调用
问题描述
public static void foo(int... a){}
public static void foo(long b, Integer... a){}
public static void main(String[] args) {
foo(1, 2); //Why is this call ambiguous?
}
我已经阅读了本节中关于变量参数调用的第三条规则:选择最具体的方法,但我仍然感到困惑,因为对于调用 foo(1, 2),形式参数 long 和 Integer 都没有 int 特定,但它仍然会引发编译错误。
我尝试了 jdk1.8 和 jdk10,在 eclipse 和命令提示符下,我得到的都是相同的结果:错误:对 'foo' 的引用不明确。
解决方案
这取决于您使用的 JDK 版本。
我已经在 JDK 8 上运行了您的代码,它运行良好,它执行了第一种方法。这是因为,在 JDK 8 上,编译器将数字 1 和 2 转换为 int。
如果您希望执行第二种方法,则需要将第一个参数转换为 long 值。像这样的东西:
public static void main(final String[] args) {
foo(1l, 2);
}
推荐阅读
- git - 从生产分支合并到主分支时如何在 Gitlab CI/CD 中增量版本或标记
- json - 如何在 pug 模板中使用 JSON 变量
- parameters - 如何使用相同的参数在 gensim 中更新训练有素的 Word2vec 模型
- excel - vba - PasteSpecial - 找不到方法或数据成员
- python - 根据条件打印某个输出
- c# - 缺少 Accept 标头时避免 HTTP 415 Unsupported Media Type
- php - Laravel 5.8 - 如何使用可选身份验证处理 API 路由?
- html - 在表格的所有单元格中使用 flexbox 样式垂直堆叠行的单元格
- python-3.x - 如何从每个输出行中分离数据
- microsoft-graph-api - 错误 Microsoft 图形 API。获取频道消息