2012-02-28 13 views
6

मुझे निम्नलिखित पंक्तियों में त्रुटि मिलती है।जावा में इस असंगत प्रकार को कैसे हल करें?

error: incompatible types 
required : java.util.Map.entry<java.lang.String,java.lang.String[]> 
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<Contact> contactsList = new ArrayList<Contact>(); 
      Profile profile = null; 
      try { 
       Map<String, String> paramsMap = new HashMap<String, String>(); 
       for (Map.Entry<String, String[]> 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"); 
    } 
} 

कृपया मदद

+1

क्या request.getParameterMap() रिटर्न:

आप एक स्पष्ट अनियंत्रित डाली कर से बचने के लिए के रूप में अन्य उत्तर का सुझाव चाहते हैं, एक वैकल्पिक अनियंत्रित रूपांतरण के लिए एक चर काम का उपयोग है? – mini

+0

वह लाइन ठीक दिखती है - क्या आप वास्तविक स्टैक ट्रेस पोस्ट कर सकते हैं? – DNA

+0

'getParameterMap()' परिभाषित किया गया है [यहां] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameterMap%28%29) – DNA

उत्तर

11

आप Map<String, String[]>

for (Map.Entry<String, String[]> entry : 
    ((Map<String, String[]>)request.getParameterMap()).entrySet()) 
+1

देता है समझाओ क्यों कास्ट की जरूरत है? 'getParameter()' एक 'मैप <स्ट्रिंग, स्ट्रिंग []> 'देता है, इसलिए' एंट्रीसेट() 'एक' सेट <एंट्री <स्ट्रिंग, स्ट्रिंग [] >> 'देता है, जो' Map.Entry < स्ट्रिंग, स्ट्रिंग []> '। सब कुछ कास्टिंग के बिना ठीक लगता है। –

+2

आप शायद जेईई 5 के साथ काम कर रहे हैं और जेईई 6 नहीं। जेईई 5 में, getParameterMap() का अर्थ यह नहीं है कि आपको एक नक्शा <ऑब्जेक्ट, ऑब्जेक्ट> मिलता है। यहां देखें http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html –

5

को request.getParameterMap() कास्ट करने के लिए निम्नलिखित का प्रयास करें की जरूरत है:

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

मुझे यकीन नहीं है कि यह काम करेगा, वैसे भी, आपको दृष्टिकोण मिल गया है। उम्मीद है की यह मदद करेगा।

2

टिप्पणी में pointed out के रूप में, getParameterMap() कच्चे प्रकार Map<String, String[]> के बजाय Map लौट जाना चाहिए। इसका मतलब है getParameterMap().entrySet() कच्चे Iterable लौटाता है, जिससे संकलक त्रुटि उत्पन्न होती है।

@SuppressWarnings("unchecked") // getParameterMap returns raw Map 
Map<String, String[]> params = request.getParameterMap(); 
for (Map.Entry<String, String[]> entry : params.entrySet()) { 
    ... 
} 
संबंधित मुद्दे