[Java]《On Java》阅读记录之 -- 可变参数重载问题
2022/9/4 1:25:16
本文主要是介绍[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...)
上,就没有问题了。
多学习,多思考,保持热情,方有收获。
这篇关于[Java]《On Java》阅读记录之 -- 可变参数重载问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?