【发布时间】:2016-07-23 12:05:04
【问题描述】:
我正在尝试理解方法重载,并且我有这些方法。
public void method(int a){
System.out.println("int a");
}
//implementing interface method
@Override
public void method() {
System.out.println("interface");
}
//varargs
public void method(int ... a){
System.out.println("int ... a");
}
用这些参数调用它们后,
int[] a = new int[5];
stack.method();
stack.method(1);
stack.method(5,6);
stack.method(null);
stack.method(a);
我有这些结果:
界面
诠释一个
int ... 一个
int ... 一个
诠释...一个
据我所知,由于模棱两可,该程序不应该编译,但无论如何它都会编译。编译器不应该报错吗?
【问题讨论】:
-
int 是基本类型,null 是对象。如果您未指定任何基本类型,则每个基本类型都有一个默认值 (int = 0)。由于数组本身就是一个对象,因此 null 被解释为 vararg 参数作为基类型而不是引用,因此不能为 null。就这么简单
标签: java compiler-errors overloading variadic-functions ambiguous