[Java]《On Java》阅读记录之 -- 可变参数重载问题
《On Java》阅读记录之 -- 可变参数重载问题
有下面一段代码:
public class OverloadingVarargs2 {
static void f(float i , Character... args) {
System.out.println("first");
}
static void f(Character... args) {
System.out.println("second");
}
public static void main(String[] args) {
f(1,'a');
f('a','b');
}
}
编译后,会看到如下错误信息:
OverloadingVarargs2.java:14: error: reference to f is ambiguous
f('a', 'b');
\^
both method f(float, Character...) in OverloadingVarargs2 and method
f(Character...) in OverloadingVarargs2 match
1 error
这个报错是说,方法 f
引用不明确,对 f
的引用有二义性。
一开始一直没太理解为什么会有二义性,查阅了一些文档后明白了。
f('a', 'b');
引用不明确是因为,同时匹配了f(float, Character...)
和f(Character...)
。
因为 f('a', 'b')
中的 'a'
(char
类型)可以会进行隐性的类型转换,可以自动转换成 float
类型(因为是从小转到大的,可以进行自动转换)。
所以说 f('a', 'b')
与两个方法都匹配,方法 f
存在二义性。
可以对代码进行以下修改以消除二义性:
public class OverloadingVarargs2 {
static void f(float i , Character... args) {
System.out.println("first");
}
static void f(char c, Character... args) {
System.out.println("second");
}
public static void main(String[] args) {
f(1,'a');
f('a','b');
}
}
给两个方法都添加一个非可变参数,这样 f('a','b')
可以明确匹配到 f(char c, Character...)
上,就没有问题了。
多学习,多思考,保持热情,方有收获。
本文来自博客园,作者:knqiufan,转载请注明原文链接:https://www.cnblogs.com/knqiufan/p/16651755.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本