2009-09-03 13 views
63

मैं निम्नलिखित वर्ग (एक सरल स्प्रिंग ट्यूटोरियल से) हैकक्षा एक कच्चा प्रकार है। सामान्य प्रकार कक्षा <T> के संदर्भ होना चाहिए पैरामिट्रीकृत

public class CarValidator implements Validator { 

    public boolean supports(Class aClass) { 
     return Car.class.equals(aClass); 
    } 

    public void validate(Object obj, Errors errors) { 
     Car car = (Car) obj; 

     ValidationUtils.rejectIfEmptyOrWhitespace(errors, "model", "field.required", "Required field"); 

     ValidationUtils.rejectIfEmptyOrWhitespace(errors, "price", "field.required", "Required field"); 

     if(! errors.hasFieldErrors("price")) { 
      if (car.getPrice().intValue() == 0) { 
       errors.rejectValue("price", "not_zero", "Can't be free!"); 
      } 
     } 

    } 
} 

कहाँ सत्यापनकर्ता वर्ग स्प्रिंग 2.5 से org.springframework.validation.Validator वर्ग है।

का समर्थन करता है विधि एक चेतावनी दिखा रहा है (कक्षा एक कच्चे प्रकार है। सामान्य प्रकार कक्षा के संदर्भ पैरामिट्रीकृत होना चाहिए), अगर मैं इस तरह के

रूप
public boolean supports(Class<?> aClass) ... 

मैं निम्न त्रुटि प्राप्त करने के लिए मानकों को जोड़ने की कोशिश :

The method supports(Class<?>) of type CarValidator has the same erasure as supports(Class) of type Validator but does not override it

वहाँ प्रश्न के इस प्रकार के बारे में धागे के बहुत सारे हैं, लेकिन मैं एक पूरा जवाब प्राप्त करना चाहते हैं और वास्तव में एक @SupressWarnings साथ समस्या यह है 'छुपा' के बिना यह समझ!

+0

प्रश्न के लिए +1, और उत्तरदाताओं के प्रति अच्छा रवैया – KLE

+0

आप जानते हैं, अगर आप उत्तर में से किसी एक को स्वीकार करते हैं, तो आपको कुछ और अंक मिलेंगे ... – KLE

+0

हो गया। बहुत धन्यवाद फिर से। –

उत्तर

32

इंटरफ़ेस कच्चे प्रकार के साथ विधि घोषित करता है। उस स्थिति में, आप चेतावनी के बिना इसे अच्छी तरह से ओवरराइड नहीं कर सकते हैं।

आपकी समस्या का मूल यह है कि स्प्रिंग इंटरफ़ेस को जावा 1.4 अनुपालन घोषित किया गया था। ध्यान दें कि स्प्रिंग 3.0 को सभी कक्षाओं को जावा 1.5 अनुपालन के रूप में वितरित करना है, जिससे आपकी समस्या ठीक हो जाएगी। अपग्रेड करने से पहले, मुझे लगता है कि आपको या तो चेतावनी या @SuppressWarning के साथ रहना होगा।

+1

उत्कृष्ट धन्यवाद। मुझे अब @SuppressWarning के साथ रहना होगा। –

+6

मुझे खुशी है कि मैं आपकी मदद कर सकता हूं। मुझे यह पसंद आया कि आप न केवल सामान काम करना चाहते हैं, बल्कि यह समझना चाहते हैं! यदि आपको फ्रांस के दक्षिण में नौकरी मिलनी है ... ;-) – KLE

+0

यह अभी भी मामला है कि वसंत एलडीएपी कच्चे प्रकार के साथ चिपक रहा है, है ना? भले ही इसके मूल भाग में जावा 1.5 की आवश्यकता है? – AlbeyAmakiir

9

इंटरफ़ेस बलों जब से तुम (अर्थात आपने सही प्रकार जानकारी निर्दिष्ट करने की अनुमति नहीं है) कच्चे प्रकार का उपयोग करने के लिए आप बिना चेतावनी के इसे लागू नहीं कर सकते जब तक कि आप @SupressWarnings का उपयोग करें।

इंटरफ़ेस को ठीक करने का एकमात्र असली फ़िक्स है (यानी इसे boolean supports(Class<?> aClass) परिभाषित करें)।

+0

हाँ मैं अब के लिए @SuppressWarning के साथ रह सकता हूं, लेकिन अगर मैं बूलियन समर्थन (कक्षा एक्लास) में बदलता हूं तो मैं टाइप एरर की दुनिया में प्रवेश करता हूं और यह सिर्फ बुरा है! क्या कोई अलग दृष्टिकोण है या क्या मैं वसंत 3.0 की प्रतीक्षा करता हूं? –

संबंधित मुद्दे