2012-12-21 13 views
9

में जेनेरिक विधि मैं एक सामान्य विधि का उपयोग करने की कोशिश कर रहा हूं इसलिए मुझे कोड दोहराना नहीं है। मैंने कोशिश की है:गैर-जेनेरिक वर्ग

private Listener createListenerAdapter(Class<T> clazz) 
{ 
    // do something 
} 

(clazz महत्वपूर्ण होने के वजह से class आरक्षित है)।

लेकिन नेटबीन्स शिकायत करते हैं कि: "प्रतीक वर्ग टी नहीं मिल सका"।

मैं उन कुछ अलग-अलग वर्गों में गुज़रने जा रहा हूं जिन पर उनके समान तरीके हैं। मुझे टी को परिभाषित करने के लिए कहां जाना चाहिए?

private <T> Listener createListenerAdapter(Class<T> clazz) 

अधिक जानकारी के लिए Java Tutorials देखें:

उत्तर

27

पद्धति के रूप में घोषित करें।

संपादित करें:T तो वापसी प्रकार से संबंधित नहीं है तो आप भी सिर्फ एक वाइल्डकार्ड का उपयोग कर सकते हैं:

private Listener createListenerAdapter(Class<?> clazz) 

संपादित करें 1: Listener का एक प्रकार का प्रतिनिधित्व करने के लिए हैclazz हैं, तो आप फोन करने वाले प्रतिबंधित करने के लिए सीमा निर्धारित कर सकते हैं (डाले और संभावित क्रम अपवाद से बचने के लिए):

private <L extends Listener> L createListenerAdapter(Class<L> clazz) 

या वाइल्डकार्ड के साथ:

private Listener createListenerAdapter(Class<? extends Listener> clazz) 

लेकिन यह इस बात पर निर्भर करता है कि शरीर में clazz का उपयोग कैसे किया जाता है।

+0

+1 धन्यवाद .. जावा थोड़ा जंगली है। –

+0

'क्लाज़' जीडब्ल्यूटी में एक जीयूआई विजेट है। –

+0

ठीक है, तो शायद 'कक्षा 'सबसे अच्छा फिट है। –

3

जेनेरिक घोषणाओं भी उन्हें इस तरह parametrizing द्वारा विधि-स्तर पर बनाया जा सकता है:

private <T> Listener createListenerAdapter(Class<T> clazz) 
{ 
    // do something 
} 
0

आप प्रकार (संभावना नहीं है, लेकिन आप एक कच्चे प्रकार चेतावनी से बचने की कोशिश की जा सकती है) का उपयोग नहीं कर रहे हैं :

private Listener createListenerAdapter(Class<?> clazz) 
{ 
    // do something, without knowing the T of the clazz 
}