Lists.新ArrayListの小さな穴

1951 ワード

ユーザーIDをリストストレージに変換し、最初に私が使った方法は:
//   ID
Integer userId = 120;
// id   List
List userIds = Lists.newArrayList(userId);
//   userIds      
List userList = userService.findByIds(userIds);

クエリの結果が空のままであることが検出され、DEBUGはuserIdsがsize=0であることが検出されました.
リストのせいだったのか?新ArrayListには、2つのリロード方法があります.
     public static  List newArrayList(K... c) {
        return new ArrayList(Arrays.asList(c));
    }

    public static  List newArrayList(int size) {
        return new ArrayList(size);
    }

私の呼び出しは次のnewArrayList(int size)メソッドに進み、リストの長さを初期化しただけです!
計画通りに最初の方法newArrayList(K...c)を歩くべきだ.
呼び出したコードを次のように変更します.
List userIds = Arrays.asList(userId);

再度テストし、ユーザーデータを正常に返しました!
 
解析の理由は次のとおりです.
リロードメソッドの呼び出しの優先度:
a.先マッチングパラメータ個数
b.パラメータタイプの最適マッチング:直接所属クラス(newArrayList(int size)これが直接所属クラス)
c.直接所属するクラスが見つからない場合、親パラメータが見つかるまで、直感的に検索順は「パッケージクラス-」親-」インタフェースである.
d.アップシフトがまだ一致していない場合、可変パラメータリストを検索する(newArrayList(K...c)方法は可変パラメータリストに属する)