我学习到包装器类时,发现报了这样的一个错误
public class Demo
{
public static void main(String[] args) {
short s1 = 12;
short s2 = 32;
Test.f(s1,s2);
Short a = s1;
Short b = s2;
Test.f(a,s1); //1
Test.h(s1); //2
Test.h(s1,s2); //3
Test.h(a); //4
Test.h(a,b); //5
}
}
class Test{
static void f(short a,short b) {}
static void f(Short a,Short b) {}
// static void h(short a) {}
static void h(Short...arr) {}
static void h(short...arr) {}
}
其中注释了的代码都报错了,我在网上查了半天也没搞明白,查到了一个感觉可能有关的
是根据参数数量和参数类型判断的。
把 你的 这2个方法:static void h(Short...arr) {}
static void h(short...arr) {}
改成: static void h(Short[] arr) {}
static void h(short[] arr) {}
然后把上面的调用改正确,你会发现能顺利执行,基本类型 和包装类型虽然能自动转换,但本质上还是属于不同的类型;
还能增加重载方法: static void f(Short a,short b){} ; static void f(short a,Short b){} 等等 都是可以的
定义的方法名与调用语句中的方法名一致(大小写敏感的);
方法定义对于方法调用语句来说是可以见的;
方法定义中的参数个数必须小于等于方法调用语句中提供的参数个数(变长参数被视为一个方法参数);
如果方法定义的参数列表中包含了变长参数,假设方法定义有n个参数(变长参数被视为一个方法参数),那么方法调用语句提供的参数列表长度必须大于等于n-1;
如果方法定义不包含变长参数,假设方法定义有n个参数,那么方法调用语句提供的参数列表的长度也必须是n;
如果方法调用语句包含了显示的类型参数,并且方法声明也是泛型的,那么方法调用语句中的真实类型参数个数必须与方法声明中的形式化类型参数的格式保持一致;
方法调用语句中参数列表中的参数类型必须依次能够与方法声明中参数列表的参数类型匹配;