सबसे पहले, क्योंकि कक्षा SimpleGenericClass
अमूर्त है, इसका उप-वर्ग होना है।
दूसरा, यह एक सामान्य वर्ग जिसका अर्थ है कि वर्ग के अंदर कहीं न कहीं आप लगभग विश्वासपूर्वक सामान्य पैरामीटर T
एक क्षेत्र के प्रकार के रूप में उपयोग किया जाएगा है।
public abstract class SimpleGenericClass<T...> {
T x;
}
अब पहले दिलचस्प यहाँ बात T
घिरा है। क्योंकि इसे T extends SimpleGenericClass<?>
के रूप में घोषित किया गया है, यह केवल SimpleGenericClass<?>
या SimpleGenericClass<?>
के कुछ उप-वर्ग हो सकता है। आपने थ्र ?
के बारे में भी पूछा। इसे वाइल्डकार्ड के रूप में जाना जाता है और the Java Tutorial on Wildcards पर इसका एक बहुत अच्छा स्पष्टीकरण है। आपके मामले में हम कहेंगे कि यह "अज्ञात का सरल जेनरिक क्लास" है। जावा में इसकी आवश्यकता है क्योंकि SimpleGenericClass<Object>
उदाहरण के लिए SimpleGenericClass<String>
का सुपरक्लास नहीं है।
दूसरा दिलचस्प बात यह है कि जब से T
किसी प्रकार की SimpleGenericClass
है, अपने वर्ग की संभावना पुनरावर्ती संरचनाओं को परिभाषित करने की तुलना में अधिक है। मेरे दिमाग में क्या आता है पेड़ (अभिव्यक्ति के पेड़ों के बारे में सोचें) जहां SimpleGenericClass
(सार) नोड प्रकार है, जिसे सभी प्रकार के विशेष नोड प्रकारों के साथ उप-वर्गीकृत किया गया है।
अद्यतनThis SO question on self-bounded generics आपके लिए सहायक हो सकता है।
अद्यतन 2
मैं आगे चला गया और एक साथ कुछ कोड दिखाता है कि यह कैसे किया जा सकता है डाल दिया। ऐप कुछ भी नहीं करता है लेकिन यह संकलित करता है और यह आपको दिखाता है कि जेनेरिक सीमाएं कुछ संभवतः सार्थक बाधाओं को कैसे आपूर्ति कर सकती हैं।
public abstract class Node<T extends Node<?>> {
public abstract T[] getChildren();
}
class NumberNode extends Node {
int data;
public Node[] getChildren() {return new Node[]{};}
}
class IdentifierNode extends Node {
int data;
public Node[] getChildren() {return new Node[]{};}
}
class PlusNode extends Node {
NumberNode left;
NumberNode right;
public NumberNode[] getChildren() {return new NumberNode[]{};}
}
अच्छी बात यह है कि यहाँ NumberNode[]
PlusNode.getChildren
के लिए एक वैध वापसी प्रकार है! क्या यह अभ्यास में मायने रखता है? कोई विचार नहीं, लेकिन यह बहुत अच्छा है। :)
यह सबसे बड़ा उदाहरण नहीं है, लेकिन सवाल खुले अंत में समाप्त हुआ था ("इस तरह की चीज़ का क्या उपयोग किया जा सकता है?")। निश्चित रूप से पेड़ों को परिभाषित करने के अन्य तरीके हैं।
स्रोत
2011-09-24 07:43:24
क्या वे दोनों 'सरल' या 'नमूना' हैं, या क्या वे अलग-अलग कक्षाएं हैं? –
इसके बारे में क्षमा करें, इसके SimpleGenericClass - मैंने इसे अपडेट किया है .. धन्यवाद – anonymous