@ बीडी ऑन रिवेनहिल: चूंकि इस पुराने सवाल ने पिछले साल नए सिरे से ध्यान आकर्षित किया है, इसलिए हमें चर्चा के लिए, थोड़ा आगे बढ़ना चाहिए। आपकी doIt
विधि का शरीर कुछ भी नहीं करता है, बिल्कुल भी नहीं T
। यह रहा:
public class Clazz<T> {
static <T> void doIt(T object) {
System.out.println("shake that booty '" + object.getClass().toString()
+ "' !!!");
}
// ...
}
तो आप पूरी तरह से सभी प्रकार के चर और सिर्फ कोड को छोड़ सकते हैं
public class Clazz {
static void doIt(Object object) {
System.out.println("shake that booty '" + object.getClass().toString()
+ "' !!!");
}
// ...
}
ठीक। लेकिन मूल समस्या के करीब आते हैं। वर्ग घोषणा पर पहला प्रकार चर निरर्थक है। केवल विधि पर दूसरे एक की जरूरत है। यहां हम फिर से जाते हैं, लेकिन यह अंतिम जवाब नहीं है, फिर भी:
public class Clazz {
static <T extends Saying> void doIt(T object) {
System.out.println("shake that booty "+ object.say());
}
public static void main(String args[]) {
Clazz.doIt(new KC());
Clazz.doIt(new SunshineBand());
}
}
// Output:
// KC
// Sunshine
interface Saying {
public String say();
}
class KC implements Saying {
public String say() {
return "KC";
}
}
class SunshineBand implements Saying {
public String say() {
return "Sunshine";
}
}
हालाँकि, यह सभी कुछ भी नहीं के बारे में बहुत अधिक उपद्रव है, चूंकि निम्न संस्करण उसी तरह काम करता है। यह सभी की जरूरत है विधि पैरामीटर पर इंटरफ़ेस प्रकार है। कहीं भी देखने में कोई प्रकार चर नहीं। क्या वास्तव में यह मूल समस्या थी?
public class Clazz {
static void doIt(Saying object) {
System.out.println("shake that booty "+ object.say());
}
public static void main(String args[]) {
Clazz.doIt(new KC());
Clazz.doIt(new SunshineBand());
}
}
interface Saying {
public String say();
}
class KC implements Saying {
public String say() {
return "KC";
}
}
class SunshineBand implements Saying {
public String say() {
return "Sunshine";
}
}