दरअसल, आप वही कर सकते हैं जो आप चाहते हैं। यदि आप कई इंटरफेस या एक क्लास प्लस इंटरफेस प्रदान करना चाहते हैं, तो आपको अपने वाइल्डकार्ड को कुछ इस तरह देखना होगा:
<T extends ClassA & InterfaceB>
पेज के नीचे , विशेष रूप से बंधे हुए टाइप पैरामीटर्स सेक्शन में जेनरिक ट्यूटोरियल देखें । यदि आप चाहें, तो आप वास्तव में एक से अधिक इंटरफ़ेस की सूची बना सकते हैं ।& InterfaceName
यह मनमाने ढंग से जटिल हो सकता है। प्रदर्शित करने के लिए, JavaDoc घोषणा देखें Collections#max
, जो (दो लाइनों पर लिपटी) है:
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
इतना जटिल क्यों? जैसा कि जावा जेनेरिक एफएक्यू में कहा गया है: द्विआधारी संगतता को संरक्षित करने के लिए ।
ऐसा लगता है कि यह चर घोषणा के लिए काम नहीं करता है, लेकिन यह एक वर्ग पर एक सामान्य सीमा डालते समय काम करता है। इस प्रकार, आप जो चाहते हैं उसे करने के लिए, आपको कुछ हुप्स के माध्यम से कूदना पड़ सकता है। लेकिन आप यह कर सकते हैं। आप कुछ ऐसा कर सकते हैं, अपनी कक्षा में एक सामान्य सीमा डालें और फिर:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
पाने के लिए variable
कि आप चाहते हैं प्रतिबंध है। अधिक जानकारी और उदाहरणों के लिए, जावा 5.0 में जेनरिक के पेज 3 को देखें । ध्यान दें, में <T extends B & C>
, कक्षा का नाम पहले आना चाहिए, और इंटरफेस का पालन करना चाहिए। और निश्चित रूप से आप केवल एक ही वर्ग को सूचीबद्ध कर सकते हैं।