返回信息流java编程思想中,5.8节提到一个例子
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');
}
}
这个代码会在第二个f调用的时候报错,f is ambiguous……
书上也说了应该在第二个f()中添加一个非可变参数。但是为什么会出错呢,我觉得main中对f的调用明明 not ambiguous啊,求大牛解惑
这是一条镜像帖。来源:北邮人论坛 / java / #29334同步于 2014/4/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]小白求教 含可变参数的函数重构
ifay
2014/4/15镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
因为'a'可以隐式的成为float类型
【 在 ifay (【意涵团】臭喵喵) 的大作中提到: 】
: java编程思想中,5.8节提到一个例子
: [code=java]
: public class OverloadingVarargs2 {
: ...................
如果实参>形参,需要将实参强制转换;
如果实参<形参,直接传递就可以。
如果实参是char类型的,如果没有形参是char的,就会将char提升为int,那 么就可以匹配形参为int或者float或者double的。很明显'a'提升后不知道找谁了。
来自「北邮人论坛手机版」
又糊涂了,请问如果传递的实参就是Character类型的,为什么还是ambiguous呢?
f(new Character('a'), new Character('b'));
【 在 poiuasd 的大作中提到: 】
: 如果实参>形参,需要将实参强制转换;
: 如果实参<形参,直接传递就可以。
: 如果实参是char类型的,如果没有形参是char的,就会将char提升为int,那 么就可以匹配形参为int或者float或者double的。很明显'a'提升后不知道找谁了。
: ...................
JAVA的自动拆箱和装箱
【 在 ifay 的大作中提到: 】
: 又糊涂了,请问如果传递的实参就是Character类型的,为什么还是ambiguous呢?
: [code=java]
: f(new Character('a'), new Character('b'));
: ...................