के माध्यम से एक्सेस किए गए सबक्लास में जावा स्थैतिक सदस्य यह एक नए सवाल की तरह प्रतीत होता है, लेकिन पिछली बार जब मैंने जावा के साथ काम किया था, तो भाषा में जेनेरिक नहीं थे।एक सामान्य माता-पिता
public abstract class AbstractBase { .... }
public class ConcreateSubA extends AbstractBase { .... }
public class ConcreateSubB extends AbstractBase { .... }
...
public class ConcreateSubZZ9PluralZAlpha extends AbstractBase { .... }
...
मैं कुछ विरासत कोड को साफ करने के कोशिश कर रहा हूँ, और वहाँ एक जगह है जहाँ दोहराव दोहराव की एक टन सब में बाहर कारक हो सकता है: मैं एक वर्ग पदानुक्रम है (नाम के रूप में संभव के रूप में सामान्यीकृत होने के लिए परिवर्तित) जेनेरिक के माध्यम से एक एकल दिनचर्या। (मैं जेनरिक में सोच रहा हूँ, क्योंकि जब इस दिनचर्या कहा जाता है, यह ठोस वर्ग का केवल एक पर काम करने की जरूरत है।)
दिनचर्या दिखता
public <Thing extends AbstractBase> void someFunc()
{
another_function_call (Thing.concreteSpecialToken);
// could also be
// another_function_call (Thing.concreteSpecialToken());
// if methods are more feasible than fields
// Cannot use
// another_function_call (Thing().concreteSpecialToken());
// because creating instances of these types is a Major Operation[tm]
}
की तरह मैं एक असंख्य लाइनों के बारे में बाहर जा रहा हूँ , लेकिन यह महत्वपूर्ण हिस्सा है: someFunc()
टाइप पैरामीट्रिक है (यह वास्तव में तर्क लेता है लेकिन उनमें से कोई भी चीजें नहीं हैं इसलिए कोई अनुमान नहीं है)। आखिरकार मुझे एक विशेष टोकन लाने की जरूरत है और यह वह जगह है जहां मुझे अस्पष्ट हो रहा है।
टोकन प्रत्येक ठोस वर्ग के लिए विशाल-गधे अद्वितीय तार हैं। वे कक्षा-आधारित हैं, उदाहरण-आधारित नहीं। प्रत्येक टोकक्लास में वास्तविक टोकन मान को private static final
फ़ील्ड के रूप में घोषित किया जाता है।
इसलिए मुझे बेस क्लास के सार्वजनिक तरीकों/फ़ील्ड (अंत में) उप-वर्ग के निजी स्थैतिक क्षेत्र में जाने की आवश्यकता है। जाहिर है, मैं बेस में abstract static
विधि घोषित नहीं कर सकता, क्योंकि इसका कोई मतलब नहीं है। यदि डेटा आवृत्ति आधारित था, तो यह बेस क्लास में एक पॉलिमॉर्फिक गेटर के साथ छोटा होगा, लेकिन सबक्लास सामान स्थिर है।
मुझे लगता है कि मुझे जावा जेनरिक की एक विशेषता याद आ रही है, लेकिन मैं Thing.whatever()
का उपयोग नहीं कर सकता जब तक कि whatever
कुछ ऐसा नहीं है जो सार आधार वर्ग में घोषित करना संभव हो। मैं या तो जावा की सीमाओं या अंतराल को पुल करने की कोशिश कर रहे विशेषज्ञता की कमी के खिलाफ दौड़ रहा हूं। एक ऐसा प्रयास जिसे मैंने वादा किया था, वर्ग वर्ग पदानुक्रम के नीचे सभी तरह से कोड डुप्लिकेशंस का एक टन था, सटीक उसी कोड के साथ सार तत्वों को परिभाषित करता था ... जो जेनेरिक को रोकने में मदद करने के लिए माना जाता है!
'ZZ9PluralZAlpha' के लिए +1 :-) –