Lists.newArrayList的一個小坑

把一個用戶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) 方法就是屬於可變參數列表)

相關文章
相關標籤/搜索