我是 Java 新手。今天在《Thinking in 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');
}
}
编译提示:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method f(float, Character[]) is ambiguous for the type OverloadingVarargs2
最佳答案
问题出在 f('a', 'b');
这两种方法都有一个可变参数,这意味着它们都将在 third and final phase of overloading resolution 中被考虑.
'a'
是一个char
,可以通过Widening Primitive Conversion自动转换为float
.
'a'
和 'b'
都可以使用 Boxing Conversion 从 char
转换为 Character
.
因此 f(float i, Character... args)
和 f(Character... args)
都适用于参数 'a'
和 'b'
,并且没有一个优先于另一个。
关于java - 使用可变参数重载时方法不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33806017/