Java构造器重载:byte、short、int参数调用编译报错问题解析
构造器重载编译错误的原因及解决方案
错误原因
Java中整数字面量默认是int类型,你调用new Test(1, 2, 3)时,三个传入的参数都是int类型。现有两个构造方法都需要对部分参数执行窄化类型转换(将int转为byte或short),但这两个构造方法的转换需求没有优先级差异——编译器无法判断应该把前两个参数转成byte+short去匹配第一个构造方法,还是把后两个参数转成byte+short去匹配第二个构造方法。由于无法确定唯一的匹配构造方法,编译器直接抛出“找不到Test(int, int, int)构造方法”的错误,因为不存在完全匹配的构造方法,且可选的两个构造方法存在调用歧义。
解决方案
通过显式类型转换明确指定参数类型,消除编译器的歧义:
- 若要调用
Test(byte, short, int)构造方法:
Test ob = new Test((byte)1, (short)2, 3);
- 若要调用
Test(int, byte, short)构造方法:
Test ob = new Test(1, (byte)2, (short)3);
内容的提问来源于stack exchange,提问作者user9342976
相关产品推荐
相关产品推荐

