निर्धारित मैं इस तरह के रूप में, एक जावा वर्ग सामान्य हो बनाने रहा हैं:जावा जेनेरिक वर्ग - प्रकार
public class Foo<T>
कैसे एक आंतरिक रूप से उस वर्ग, क्या 'टी' किया जा रहा समाप्त हो गया करने के लिए निर्धारित कर सकते हैं?
public ???? Bar()
{
//if its type 1
// do this
//if its type 2
// do this
//if its type 3
// do this
//if its type 4
// do this
}
मैं जावा एपीआई के आसपास poked और प्रतिबिंब सामान के साथ खेला है, instanceof, getClass, .class, आदि, लेकिन मैं सिर या उनमें से पूंछ बनाने के लिए नहीं कर पा रहे। मुझे लगता है कि मैं करीब हूं और बस कई कॉलों को गठबंधन करने की आवश्यकता है, लेकिन कम आना जारी रखें।
अधिक विशिष्ट होने के लिए, मैं यह निर्धारित करने का प्रयास कर रहा हूं कि कक्षा को 3 संभावित प्रकारों में से एक के साथ तत्काल किया गया था या नहीं।
इस लगभग एक बुरा डिजाइन पसंद होने की गारंटी है करने की इच्छा। संभावना है कि अगर बयान लागू किया जा करने के लिए प्रत्येक "प्रकार" के ज्ञान की आवश्यकता है, इसलिए आप शायद उन सभी वर्गों एक ही मूल प्रकार का होना चाहिए, और "ऐसा करते हैं" एक आभासी विधि होना चाहिए। इसमें कक्षाओं को लपेटना शामिल हो सकता है, लेकिन यदि आप इस सड़क पर जाते हैं तो कुल मिलाकर आपका डिज़ाइन बेहतर होगा। –
यदि बयानों में संभावनाएं सभी संभव कॉलिंग प्रकारों के बीच बढ़त के मामले हैं, जिन्हें पूरी तरह से अलग कार्यान्वयन की आवश्यकता होती है। मैं यहां जो कह रहा हूं उसके साथ समझौता कर रहा हूं, लेकिन विशिष्ट आवेदन एक चट्टान और एक कठिन जगह है। –
सामान्य प्रकार के परम के लिए कक्षा प्राप्त करने की आवश्यकता हमेशा खराब डिजाइन निर्णय नहीं होती है। एक वैध आवश्यकता (मेरा! :) एक विधि कॉल हो सकता है जिसके लिए कक्षा <> पैरामीटर की आवश्यकता होती है। – dahvyd