प्रस्तावना:मैं जेनरिक को समझते हैं और कैसे वे कक्षा स्तर (उदाहरण के class MyClass<T>
) पर घोषित कर रहे हैं लेकिन मैं इसे एक स्थिर विधि के स्तर पर घोषित कभी नहीं देखा है, और किसी भी स्पष्ट बाइंडिंग के बिना (जैसे class MySubclass<String> extends MyClass
)।एक सामान्य विधि क्या है और <T> इस मामले में बाध्य कैसे है?
मुझे इस कोड स्निपेट को एक ऐप में मिला है जिस पर मैं काम कर रहा हूं (मैंने यह हिस्सा नहीं लिखा था)। मैंने इस तरह से घोषित एक विधि कभी नहीं देखी है। <T>
कक्षा में कहीं और परिभाषित नहीं है। Intent.getExtras().get()
एक Object
देता है जो वास्तव में String
, Boolean
... आदि हो सकता है।
private static <T> T getItemExtra(final Intent intent, final String extraName) {
T item = null;
if(intent != null && intent.getExtras() != null) {
item = (T) intent.getExtras().get(extraName);
}
return item;
}
नमूना उपयोग:
String s1 = getItemExtra(someIntent, "some_string_extra");
Uri u1 = getItemExtra(someIntent, "some_uri_extra");
JVM कैसे जान लेता है कि किस प्रकार <T>
के लिए उपयोग करने के लिए? (हाँ यह विधि संकलित और सफलतापूर्वक निष्पादित)।
दूसरे प्रश्न का दूरस्थ रूप से डुप्लिकेट नहीं है। –
@ नीलिश मैं जेनेरिक वर्गों के बारे में पूछ रहा हूं, सामान्य वर्ग नहीं। मैंने इसे प्रतिबिंबित करने के लिए प्रश्न अपडेट किया है। –
@ OliverGondža हाँ मुझे यह स्वीकार करना होगा कि यह एक डुप्लिकेट है। –