簡體   English   中英

將列表強制到HashMap是否不好?

[英]Is it a bad way to force a List to a HashMap?

我將提交我的代碼,對其進行解釋,然后向您提問。

以下代碼是控制器代碼的一部分。

        HashMap<String, Object> result = bService.getBoardListPage(params, page-1);
     System.out.println("result : " + result);
     // Deriving the desired value among the List values ??existing in the HashMap -----------------------------------------
     List<?> list = (List<?>) result.get("boardList");

     for(int i = 0; i < list.size(); i++)
     {
        HashMap<String, Object> map = (HashMap<String, Object>) list.get(i);
        System.out.println("map 1 : " + map);
        int all_boardIDX = (Integer) map.get("board_idx");
        HashMap<String, Object> replyBoard = bService.boardApplicableReplyBoard(all_boardIDX);

        map.put("hh", replyBoard);
        System.out.println("map 2 : " + map);
     }
     // -------------------------------------------------------------------------------------

最重要的是,代碼將回復該帖子。 (這是回復。沒有評論)

HashMap<String, Object> result = bService.getBoardListPage(params, page-1);

以上結果包含有關帖子的信息。

結果日志如下所示。

result : {current=1, last=1, start=1, end=10, boardList=[{phone_2=9959, comment_count=0, phone_1=010, board_idx=6, phone_3=7432, board_title=zzz, pw=1, sex=false, birth=1993-12-04, board_writer=test2, board_readNum=1, board_content=hhh, fileCount=0, board_writeDate=2017-12-07 18:44:44.0, authority=false, name=이, id=test2, idx=3, board_goodNum=0, email=rkdhfl1470@naver.com}

我想將有關答復的信息放入結果中存在的boardList中!

因此,我得到了如下所示的boardList。

List<?> list = (List<?>) result.get("boardList");

然后我繞過for語句以獲取列表的大小,並按如下方式處理for語句以包含回復信息。

          for(int i = 0; i < list.size(); i++)
         {
            HashMap<String, Object> map = (HashMap<String, Object>) list.get(i);
            System.out.println("map 1 : " + map);
            int all_boardIDX = (Integer) map.get("board_idx");
            HashMap<String, Object> replyBoard = bService.boardApplicableReplyBoard(all_boardIDX);

            map.put("hh", replyBoard);
            System.out.println("map 2 : " + map);
         }

結果,它按照我想要的方式工作!

map 2 : {phone_2=9959, comment_count=0, hh={rb_title=[답글] Test, rb_writeDate=2017-12-07 15:38:03.0, board_idx=1, rb_idx=1, rb_writer=admin, rb_content=HH, rb_readNum=0, idx=1}

但是我不舒服。

原因是,這是因為在下面的代碼中,發生了諸如“類型安全:從捕獲#3的?到HashMap的未選中強制轉換”的警告。

HashMap<String, Object> map = (HashMap<String, Object>) list.get(i);

所以我很好奇。 我寫的代碼正確嗎?

如何改善我的代碼?

並且將List類型轉換為HashMap是不正確的嗎?

作為初學者,我有很多問題。 請告訴我您的意見。

感謝您看到長句。

並且將List類型轉換為HashMap是不正確的嗎?

如果可以保證它不會拋出java.lang.ClassCastException那就很好。 您確切地知道哪些對象將進入列表/地圖,因此很好。

要么

您可以這樣定義列表:

List<HashMap<String, Object>>

我認為這將消除警告。 然后,您也不必再投放它。

類型安全確實可以為您提供幫助。 或其他將來需要維護您的代碼的人。 使用List<HashMap<String, Object>>告訴編譯器此List將始終包含HashMap<String, Object>元素。 因此,如果您嘗試將List的元素視為不同Class對象,則實際上會遇到編譯時錯誤。

而使用List<?>您並沒有告訴編譯器任何可使代碼保持類型安全的東西(即,避免拋出java.lang.ClassCastException )。 因此,如果您搞砸了,則只會在運行時且僅在失敗情況下才能看到錯誤。

希望有道理!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM