2013-10-09 7 views
5

क्या ऑब्जेक्ट लागू करने वाले इंटरफ़ेस की सूची की पहचान करने का कोई तरीका है। उदाहरण के लिए: लिंक्डलिस्ट सूची और कतार इंटरफेस दोनों लागू करता है।इंटरफ़ेस की सूची की पहचान करें ऑब्जेक्ट लागू करता है

क्या कोई जावा स्टेटमेंट है जिसका उपयोग मैं इसे निर्धारित करने के लिए कर सकता हूं?

उत्तर

6

ऐसा लगता है आप Class.getInterfaces() लिए देख रहे हैं की तरह:

public static void showInterfaces(Object obj) { 
    for (Class<?> iface : obj.getClass().getInterfaces()) { 
     System.out.println(iface.getName()); 
    } 
} 

उदाहरण के लिए, LinkedList के क्रियान्वयन की दिशा में है कि प्रिंट:

java.util.List 
java.util.Deque 
java.lang.Cloneable 
java.io.Serializable 

ध्यान दें कि java.util.Queue इस से प्रदर्शित नहीं किया जाता है, क्योंकि java.util.Deque इसे विस्तारित करता है - इसलिए यदि आप सभी इंटरफ़ेस लागू करना चाहते हैं, तो आपको रिकर्स करना होगा। उदाहरण के लिए, इस तरह के कोड के साथ:

public static void showInterfaces(Object obj) { 
    showInterfaces(obj.getClass()); 
} 

public static void showInterfaces(Class<?> clazz) { 
    for (Class<?> iface : clazz.getInterfaces()) { 
     System.out.println(iface.getName()); 
     showInterfaces(iface); 
    } 
} 

... उत्पादन होता है:

java.util.List 
java.util.Collection 
java.lang.Iterable 
java.util.Deque 
java.util.Queue 
java.util.Collection 
java.lang.Iterable 
java.lang.Cloneable 
java.io.Serializable 

... और अब आप ध्यान दें हूँ कि Iterable और Collection घटित दो बार :) आप एकत्र कर पाया डुप्लिकेशंस से बचने के लिए, "सेट में अब तक इंटरफ़ेस देखा गया"।

संबंधित मुद्दे

 संबंधित मुद्दे