将List强制为HashMap是一种坏方法吗?

时间:2017-12-08 15:48:09

标签: java spring spring-mvc collections

我将提交我的代码,解释并向您提问。

以下代码是Controller代码的一部分。

        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}

我想在resultList中存在的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-of-To HashMap的强制转换”。

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

所以我很好奇。我是否正确编写了代码?

如何改进我的代码?

将List类型强制转换为HashMap是不对的?

作为初学者,我有很多问题。请告诉我你的意见。

感谢您看到长句。

1 个答案:

答案 0 :(得分:0)

将List类型转换为HashMap是不正确的?

如果你可以保证它不会抛出java.lang.ClassCastException,那就没关系了。你确切知道哪些对象进入列表/地图,所以很好。

您可以像这样定义列表:

List<HashMap<String, Object>>

我认为这将摆脱警告。那么你也不必再施展它了。

类型安全真的可以帮到你。或者其他需要在将来维护您的代码的人。使用List<HashMap<String, Object>>,您告诉编译器此List将始终包含HashMap<String, Object>的元素。因此,如果您尝试将List的元素视为不同Class的对象,则实际上会遇到编译时错误。

而对于List<?>,您并没有告诉编译器任何允许它保持代码类型安全的东西(即避免抛出java.lang.ClassCastException)。因此,如果你搞砸了,你只能在运行时看到错误并且只能在失败情况下看到。

希望有意义!