हाँ मैं वही कुछ समय के बारे में सोच रहा था।
हाइपोटेटिकली (एक्सएक्स कारण हैं कि यह ऐसा क्यों नहीं है) यह अच्छा होगा अगर जेनेरिक कन्स्ट्रक्टर पूरे वर्ग के लिए औपचारिक जेनेरिक प्रकार को परिभाषित कर सकें (सामान्य वर्ग घोषणा के रूप में) ... ऐसा कहने के लिए, अगर परिभाषित किया जाता है जेनेरिक निर्माता दिया जाएगा आपको लगता है कि कक्षा में सामान्य क्षेत्रों है ...
उदाहरण के लिए यदि आप सामान्यीकरण से बचना चाहता था:
EntityRequestCallback extends RequestCallback
लेकिन आप RequestCallback सामान्य RequestCallback<E extends Entity>
, आप ऐसा नहीं कर सका बनना चाहता था क्योंकि केवल दो प्रकार के अनुरोध PUT/POST उपयोग इकाई। PUT/POST अनुरोधों के लिए केवल रचनाकारों में इकाई पैरामीटर होता है।
public class RequestCallback {
/** GET/DELETE requests */
public RequestCallback(String gttUrl, HttpMethod method,) {
this.gttUrl = gttUrl;
this.method = method;
}
/** PUT/POST requests */
public RequestCallback(String gttUrl, HttpMethod method, Entity entity) {
this.gttUrl = gttUrl;
this.method = method;
this.entity = entity;
}
}
लेकिन वर्ग सामान्य क्योंकि आप एक अनुरोध है कि एक इकाई है, जो मतलब होगा आप का दृष्टांत हैं
new RequestCallback(); //without specifying generic parameter - worse than nothing
नहीं है के लिए RequestCallback बनाने की जाएगी नहीं किया जा सकता तो यह है कि केवल संभव तरीके से यहाँ है सामान्यीकरण:
EntityRequestCallback<E extends Entry> extends RequestCallback
तो तुम हो सकता है कि जेनेरिक क्षेत्रों:
public E entity;
इस विशेष उदाहरण में, सामान्यीकरण वैसे भी सही विकल्प है, लेकिन ऐसे मामले हैं जहां सामान्यीकरण नहीं होगा।
हाँ, यह रचनाकारों द्वारा सामान्य तरीकों को प्रतिस्थापित करने की अनुमति देता है (लेकिन आप क्यों चाहेंगे?)। मैंने कभी जंगली में कभी नहीं देखा है। मेरे पैसे के लिए, यह एक जटिलता है कि भाषा बिना हो सकती थी (जैसा सी # ने बाद में जावा जेनरिक के संस्करण को पेश किया था)। –