我想接受整數的方法,並且雙打。 Number類可以用作參數,以便所有數字都可以被接受爲參數。 (我懷疑它可能適用,但只能爲整數,而不是整數)Number類可以用作參數來接受所有類型的數字作爲參數嗎?
-1
A
回答
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 0.5)
- 裝箱轉換(§5.1.7)任選地隨後通過加寬引用轉換
- 取消裝箱轉換(§5.1.8)任選地隨後進行加寬原語轉換
在這種情況下,使用鬆散調用上下文(對於foo
的前三個調用),因爲使用嚴格調用上下文無法找到方法聲明。
+0
使用Number作爲便利參數是否存在重大風險或缺點?如果一個方法需要3個數字,而不是多次重載它來覆蓋所有可能的基元組合,我感覺它讓我的生活變得輕鬆多了。 – NikkyD 2016-04-27 12:25:13
相關問題
- 1. 我可以使用反射類型作爲類型參數嗎?
- 2. C++類接受任何類型的函數作爲參數
- 3. 爪哇 - 接受Map作爲參數類
- 4. 我可以傳入「類型」作爲函數參數嗎?
- 5. Ruby方法可以接受二維數組作爲參數嗎?
- 6. 使用類型參數的類型參數作爲斯卡拉
- 7. varargs參數作爲類型參數?
- 8. 何時應該接受類類型作爲參數?
- 9. 我們可以使用MemberFunction類型作爲模板參數嗎?
- 10. 接受嵌套可變參數類模板作爲函數模板的參數
- 11. 當前類的類型可以用作泛型類型參數的值嗎?
- 12. 使用is作爲模板類型參數時,可以訪問類字段嗎?
- 13. 使用嵌套類型參數作爲頂層類型參數
- 14. 可以將類引用作爲參數發送給函數嗎?
- 15. C++:使用類類型作爲參數
- 16. 如何接收類型作爲參數?
- 17. 使用「T」與「Object」作爲方法參數來接受參數?
- 18. 參數類型或返回類型作爲參數?
- 19. 可爲空類型作爲通用參數嗎?
- 20. 我可以使一個函數接受通用函數作爲參數嗎?
- 21. '公共函數'沒有類型參數,所以不能有類型參數。 VB.NET
- 22. Scala類型參數在作爲基類的參數使用時可以引用它自己嗎?
- 23. 接受任何類型作爲委託參數
- 24. iOS:接受多個對象類型作爲參數(id)對象?
- 25. 類作爲參數
- 26. Blackberry Java可以參數化類型嗎?
- 27. Scala傳遞類類型作爲參數
- 28. 傳類類型作爲參數
- 29. 類型與類作爲虛擬參數
- 30. C++類類型作爲參數
明顯的問題:你有沒有試過?我相信答案是肯定的,但是要測試這個問題比輸入問題少得多。 – 2015-02-07 08:36:18
是的,你可以。你爲什麼不自己嘗試一下,而不是在這裏問。 – SMA 2015-02-07 08:36:53