我将提交我的代码,解释并向您提问。
以下代码是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是不对的?
作为初学者,我有很多问题。请告诉我你的意见。
感谢您看到长句。
答案 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
)。因此,如果你搞砸了,你只能在运行时看到错误并且只能在失败情况下看到。
希望有意义!