2015-02-07 141 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

相關問題