2015-02-07 63 views
-1

我想接受整数的方法,并且双打。 Number类可以用作参数,以便所有数字都可以被接受为参数。 (我怀疑它可能适用,但只能为整数,而不是整数)Number类可以用作参数来接受所有类型的数字作为参数吗?

+0

明显的问题:你有没有试过?我相信答案是肯定的,但是要测试这个问题比输入问题少得多。 – 2015-02-07 08:36:18

+0

是的,你可以。你为什么不自己尝试一下,而不是在这里问。 – SMA 2015-02-07 08:36:53

回答

4

是的,自动装箱工作转换intNumber一样好,从intInteger

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 0.5)
  • 装箱转换(§5.1.7)任选地随后通过加宽引用转换
  • 取消装箱转换(§5.1.8)任选地随后进行加宽原语转换

在这种情况下,使用松散调用上下文(对于foo的前三个调用),因为使用严格调用上下文无法找到方法声明。

+0

使用Number作为便利参数是否存在重大风险或缺点?如果一个方法需要3个数字,而不是多次重载它来覆盖所有可能的基元组合,我感觉它让我的生活变得轻松多了。 – NikkyD 2016-04-27 12:25:13

相关问题