यह किया जा सकता है, लेकिन type erasure इसे बहुत कठिन बना सकता है। जैसा कि अन्य उत्तरों पर चर्चा है, आपको या तो ParameterizedClass
का सबक्लास बनाना है या T
ParameterizedClass
पर फ़ील्ड जोड़ें, और प्रतिबिंब कोड जो आपको करने की आवश्यकता है उसे समेकित किया गया है।
:
स्थिर तरीकों के लिए जावा के प्रकार निष्कर्ष के कारण
class ParameterizedClass<T> {
private Class<T> type;
/** Factory method */
public static <T> ParameterizedClass<T> of(Class<T> type) {
return new ParameterizedClass<T>(type);
}
/** Private constructor; use the factory method instead */
private ParameterizedClass(Class<T> type) {
this.type = type;
}
// Do something useful with type
}
, आप बहुत ज्यादा अतिरिक्त बॉयलरप्लेट के बिना अपने वर्ग का निर्माण कर सकते हैं:
मैं इन परिस्थितियों में क्या सलाह देते हैं, इस तरह समस्या के समाधान के लिए है
ParameterizedClass<Something> foo = ParameterizedClass.of(Something.class);
इस तरह, आपका ParameterizedClass
पूरी तरह से सामान्य और प्रकार-सुरक्षित है, और आपके पास अभी भी क्लास ऑब्जेक्ट तक पहुंच है।
संपादित: टिप्पणी संबोधित
बढ़ाता है *** यह *** संभव है। यह जवाब गलत है। समाधान का दूसरा उत्तर जांचें। –
@AdamArold मुझे तब तक पता नहीं था जब मैंने जवाब लिखा था, लेकिन आप सही हैं। हालांकि, मैं अभी भी इसकी अनुशंसा नहीं करता हूं। मैंने तदनुसार अपना जवाब अपडेट कर लिया है। – jqno