把一個用戶ID轉換成List存儲,最開始我使用的方法是:測試
// 用戶ID Integer userId = 120; // id 轉 List List<integer> userIds = Lists.newArrayList(userId); // 經過userIds查詢用戶列表 List<User> userList = userService.findByIds(userIds);
發現查詢的結果一直爲空, DEBUG發現userIds一直size = 0spa
原來是由於 Lists.newArrayList 存在兩個重載的方法:code
public static <K> List<K> newArrayList(K... c) { return new ArrayList(Arrays.asList(c)); } public static <K> List<K> newArrayList(int size) { return new ArrayList(size); }
個人調用走了下面的 newArrayList(int size) 方法,只是初始化了列表的長度而已!blog
按計劃應該是走第一個方法 newArrayList(K... c) 。。接口
因而把調用的代碼改爲以下:class
List<integer> userIds = Arrays.asList(userId);
再次測試, 成功返回了用戶數據!List
分析緣由爲:方法
重載方法的調用優先級: 數據
a.先匹配參數個數 查詢
b.參數類型的最佳匹配:直接所屬類 (newArrayList(int size) 這個就是直接所屬類)
c.若是沒有找到直接所屬類,會發生向上轉型,直至找父類參數,直觀上查找順序爲:包裝類-》父類-》接口
d.若是向上轉型仍沒法匹配,則查找可變參數列表 (newArrayList(K... c) 方法就是屬於可變參數列表)