मैं जब मैंने देखा है कि निम्नलिखित कोड चेतावनी के बिना संकलित बहुत हैरान था और प्रिंट Integer/String
:एक सामान्य विधि कैसे लिखें जो जावा में उसी प्रकार के दो तर्क लेता है?
public final class GenericsTest {
private static <T> void method(T arg1, T arg2) {
System.out.println(arg1.getClass().getSimpleName());
System.out.println(arg2.getClass().getSimpleName());
}
public static void main(String[] args) {
method(1, "1");
}
}
मैं एक संकलन त्रुटि की उम्मीद।
क्या कोई कारण है कि यह कोड संकलित करता है?
यह सुनिश्चित करने का सही तरीका क्या है कि तर्कों का एक ही प्रकार है?
संपादित करें: बाध्य प्रकार पैरामीटर के बारे में क्या?
private static <T, U extends T> void method(T arg1, U arg2) {
System.out.println(arg1.getClass().getSimpleName());
System.out.println(arg2.getClass().getSimpleName());
}
दुर्भाग्य से, जावा चक्रीय बाधाओं अनुमति नहीं देता: सबसे अच्छा मैं के बारे में सोच सकते हैं कि यह है। <T extends U, U extends T>
संकलित नहीं करता है। क्या यह एक मृत अंत है?
विधि को कॉल करते समय आप सामान्य प्रकार बता सकते हैं: 'जेनिक्सटेस्ट। विधि (1, "1"); // संकलित नहीं करेगा ' –
August