如何在java中解决这种不兼容的类型?

我在以下几行中得到错误。

error: incompatible types required : java.util.Map.entry found :java.lang.Object 

完整代码如下

 package com.auth.actions; public class SocialAuthSuccessAction extends Action { final Log LOG = LogFactory.getLog(SocialAuthSuccessAction.class); @Override public ActionForward execute(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws Exception { AuthForm authForm = (AuthForm) form; SocialAuthManager manager = null; if (authForm.getSocialAuthManager() != null) { manager = authForm.getSocialAuthManager(); } if (manager != null) { List contactsList = new ArrayList(); Profile profile = null; try { Map paramsMap = new HashMap(); for (Map.Entry entry :request.getParameterMap().entrySet() ) { // error in this line! String key = entry.getKey(); String values[] = entry.getValue(); paramsMap.put(key, values[0].toString()); // Only 1 value is } AuthProvider provider = manager.connect(paramsMap); profile = provider.getUserProfile(); contactsList = provider.getContactList(); if (contactsList != null && contactsList.size() > 0) { for (Contact p : contactsList) { if (StringUtils.isEmpty(p.getFirstName()) && StringUtils.isEmpty(p.getLastName())) { p.setFirstName(p.getDisplayName()); } } } } catch (Exception e) { e.printStackTrace(); } request.setAttribute("profile", profile); request.setAttribute("contacts", contactsList); return mapping.findForward("success"); } // if provider null return mapping.findForward("failure"); } } 

请帮忙

您需要将request.getParameterMap()Map

 for (Map.Entry entry : ((Map)request.getParameterMap()).entrySet()) 

请尝试以下方法:

 for (Object obj :request.getParameterMap().entrySet() ) { Map.Entry entry = (Map.Entry) obj; String key = entry.getKey(); String values[] = entry.getValue(); paramsMap.put(key, values[0].toString()); // Only 1 value is } 

我不确定这会起作用,无论如何,你得到了方法。 希望这可以帮助。

正如注释中所指出的, getParameterMap()必须返回原始类型Map而不是Map 。 这意味着getParameterMap().entrySet()返回raw Iterable ,导致编译器错误。

如果您想避免像其他答案所建议的那样进行明确的未经检查的强制转换,则可以使用变量赋值来进行未经检查的转换:

 @SuppressWarnings("unchecked") // getParameterMap returns raw Map Map params = request.getParameterMap(); for (Map.Entry entry : params.entrySet()) { ... }