यह कोड की सरल संरचना है जिसे मैं महसूस करना चाहता हूं:

public class B {}
public class A<X extends B> {
    X x;
    public A(X x) {this.x = x;}
    public X getX() {return x;}
}
public class C<A> {
    public A getA() {return null;}       
    public A<T> T getGenericXOfA() {return getA().getX();}
}

मैं कक्षा ए के सामान्य पैरामीटर पर प्रयुक्त विधि 'getGenericXOfA' रिटर्न प्रकार का उपयोग करके अपनी कक्षा सी में जाना चाहता हूं। क्या यह जावा में भी संभव है? मैं ऐसा कुछ करना चाहता हूं:

public class C<A<X>> {
    public A getA() {return null;}       
    public X getGenericXOfA() {return getA().getX();}
}

या उस तरह ?:

public class C<A> {
    public A getA() {return null;}       
    public A<T> T getGenericXOfA() {return getA().getX();}
}
1
TheTonsOfCode 23 नवम्बर 2017, 19:33

2 जवाब

सबसे बढ़िया उत्तर

जब आपको इसे X द्वारा सामान्यीकृत करने की आवश्यकता होती है, तो आपने एक कच्चे प्रकार के A का उपयोग किया है, जो B का विस्तार करता है:

class C<X extends B> {

    public A<X> getA() { ... }

    public X getGenericXOfA() {
        return getA().getX();
    }

}

दरअसल, आप जेनेरिक पैरामीटर के नाम से खेल रहे हैं। वे कोई फर्क नहीं पड़ता और मौजूदा वर्गों का उल्लेख नहीं कर सकते।

यदि आप वही सामान्य प्रकार चाहते हैं जैसे किसी अन्य वर्ग में है, तो आपको उसी टेम्पलेट को दोहराना चाहिए।

1
Andrew Tobilko 23 नवम्बर 2017, 20:00

तुम कर सकते हो:

public class C<X extends B, Y extends A<X>> {
    public Y getA() {return ... }       
}
1
kumesana 23 नवम्बर 2017, 20:07