उत्तर नहीं है। कम से कम सामान्य प्रकारों का उपयोग करने का कोई तरीका नहीं है। मैं जो भी चाहता हूं उसे करने के लिए जेनेरिक और फैक्ट्री विधियों के संयोजन की सिफारिश करता हूं।
class MyGenericClass<T extends Number> {
public static MyGenericClass<Long> newInstance(Long value) {
return new MyGenericClass<Long>(value);
}
public static MyGenericClass<Integer> newInstance(Integer value) {
return new MyGenericClass<Integer>(value);
}
// hide constructor so you have to use factory methods
private MyGenericClass(T value) {
// implement the constructor
}
// ... implement the class
public void frob(T number) {
// do something with T
}
}
यह सुनिश्चित करता है कि केवल MyGenericClass<Integer>
और MyGenericClass<Long>
उदाहरणों बनाया जा सकता है। यद्यपि आप अभी भी MyGenericClass<Double>
प्रकार का एक चर घोषित कर सकते हैं, यह सिर्फ शून्य होना होगा।
तब जेनेरिक का उपयोग करने का लाभ कहां है? टाइप टी के पैरामीटर वाले विधि बनाने के बाद से कोई भी नंबर स्वीकार करेगा? –
अपने कोड में, यह निश्चित रूप से नहीं है। चूंकि टाइप टी के पैरा को स्वीकार करने की विधि लिख नहीं सकती है। आपको प्रत्येक ऐसी विधि की दो अलग-अलग परिभाषाएं लिखनी होंगी, एक इंटीजर के लिए और दूसरा लांग के लिए। –
@djaqeel यह सच नहीं है। यदि आप लंबे या पूर्णांक के अलावा किसी अन्य चीज़ के साथ फ्रोब विधि का उपयोग करने का प्रयास करते हैं तो आपको एक कंपाइलर अपवाद मिलेगा। – luke