टाइप एरर के बाद, T
के बारे में ज्ञात सभी यह है कि यह Object
का कुछ उप-वर्ग है। T
के उदाहरण बनाने के लिए आपको कुछ फैक्ट्री निर्दिष्ट करने की आवश्यकता है।
एक दृष्टिकोण इस्तेमाल कर सकते हैं एक Supplier<T>
:
class MyClass<T> {
private final Supplier<? extends T> ctor;
private T field;
MyClass(Supplier<? extends T> ctor) {
this.ctor = Objects.requireNonNull(ctor);
}
public void myMethod() {
field = ctor.get();
}
}
प्रयोग इस प्रकार दिखाई देंगे:
MyClass<StringBuilder> it = new MyClass<>(StringBuilder::new);
वैकल्पिक रूप से, आप एक Class<T>
वस्तु प्रदान कर सकते हैं, और फिर प्रतिबिंब का उपयोग करें।
class MyClass<T> {
private final Constructor<? extends T> ctor;
private T field;
MyClass(Class<? extends T> impl) throws NoSuchMethodException {
this.ctor = impl.getConstructor();
}
public void myMethod() throws Exception {
field = ctor.newInstance();
}
}
क्या पैकेज 'Supplier' में स्थित है? 'माइक्लास (कक्षा extends T> इम्प्लायर) 'घोषित किया जाना चाहिए' संकलित करने के लिए NoSuchMethodException' फेंकता है। आपका उत्तर दुर्भाग्य से जावा शुरुआती के अनुकूल नहीं है। – user927387
@ user927387 'java.util.function.Supplier' – erickson