2012-04-16 15 views
7

छिपा है:जावा जेनरिक - प्रकार पैरामीटर स्ट्रिंग मेरी इंटरफ़ेस में प्रकार स्ट्रिंग

public <T> Result query(T query) 

मेरी 1 उपवर्ग में:

public <HashMap> Result query(HashMap queryMap) 

मेरी 2nd उपवर्ग में:

public <String> Result query(String queryStr) 

पहले सबक्लास में कोई संकलन चेतावनी नहीं है जबकि 2 उप-वर्ग में है: प्रकार पैरामीटर स्ट्रिंग प्रकार छुपा रहा है स्ट्रिंग? मैं समझता हूं कि मेरा पैरामीटर जेनेरिक प्रकार से छिपा हुआ है। लेकिन मैं समझना चाहता हूं कि वास्तव में क्या हुआ?

उत्तर

15

ऐसा लगता है कि आप एक प्रकार पैरामीटर बनाने की कोशिश कर रहे हैं - परिवर्तनीय - जिसका नाम String है। मुझे संदेह है कि आपका पहला सबक्लास बस java.util.HashMap आयात नहीं करता है।

किसी भी घटना में, T अपने इंटरफ़ेस का एक प्रकार पैरामीटर है अगर - जो यह शायद जाना चाहिए - तो आप नहीं उपवर्गों में <String> बिल्कुल सहित किया जाना चाहिए। यह सिर्फ

public interface Interface<T> { 
    public Result query(T query); 
} 

public class Subclass implements Interface<String> { 
    ... 
    public Result query(String queryStr) { 
    ... 
    } 
} 
+0

एक शैली के मुद्दे के रूप में, मैं एक प्रकार पैरामीटर 'स्ट्रिंग' - या अन्य सामान्य रूप से उपयोग किए जाने वाले जावा क्लास नामों के नामकरण के खिलाफ अनुशंसा करता हूं। बाद में कोड की जांच करने वाले किसी के लिए यह संभावित रूप से भ्रमित हो जाएगा। अगर मुझे जावा में 'स्ट्रिंग' दिखाई देता है, तो मुझे लगता है कि यह 'java.lang.String' है। – oconnor0

+1

ओह, बिल्कुल। मुझे संदेह है कि मैं जो उदाहरण देता हूं वह ओपी _मेन्ट_ करने के लिए है, हालांकि। –

+0

आप [यह एस एंड ओ प्रश्न] (http://stackoverflow.com/questions/10011758/troubleshooting-the-type-parameter-t-is-hiding-the-type-t-warning) पर भी एक नज़र डालना चाहते हैं । –

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