我希望这个方法能够接受整数,然后加倍。 可以将Number类用作参数,以便可以接受所有数字作为参数。 (我怀疑它可以适用,但仅适用于整数,而不是整数。)
答案 0 :(得分:4)
是的,自动装箱可以将int
转换为Number
以及从int
转换为Integer
:
public class Test {
public static void main(String[] args) throws Exception {
foo(10);
foo(10.5);
foo(10.5f);
foo(java.math.BigInteger.ONE);
}
static void foo(Number number) {
System.out.println(number + " " + number.getClass());
}
}
或者更确切地说,装箱本身只会从int
转换为Integer
,但扩展参考转换会从Integer
转换为Number
。来自JLS 5.3:
调用上下文允许将方法或构造函数调用(第8.8.7.1节,第15.9节,第15.12节)中的参数值分配给相应的形式参数。
严格的调用上下文允许使用以下之一:
- 身份转换(第5.1.1节)
- 扩大原始转换(第5.1.2节)
- 扩大参考转换(第5.1.5节)
松散的调用上下文允许更宽松的转换集,因为如果使用严格的调用上下文找不到适用的声明,它们仅用于特定的调用。松散的调用上下文允许使用以下之一:
- 身份转换(第5.1.1节)
- 扩大原始转换(第5.1.2节)
- 扩大参考转换(第5.1.5节)
- 拳击转换(§5.1.7),可选地后跟加宽参考转换
- 一个拆箱转换(第5.1.8节),可选地后跟一个加宽的基元转换
在这种情况下,使用松散的调用上下文(对于foo
的前三次调用),因为使用严格的调用上下文不能找到方法声明。