मैं इस तरह एक अंतरफलक है:जावा जेनरिक: आंतरिक इंटरफेस एक आंतरिक (आंतरिक) superinterface से क्यों लागू नहीं कर सकता?
public interface SuperInterface {
public interface SubInterface {
public void get();
}
//**More interfaces*/
}
मेरी टूलकिट, में इस विधि जो सभी वस्तुओं जो एक निश्चित वर्ग के उदाहरण हैं पुन: प्राप्त करता:
public static <T> ArrayList<T> getSome(ArrayList<Object> objects, Class<T> clazz) {
ArrayList<T> result = new ArrayList<T>();
for (Object o : objects)
if (clazz.isInstance(o))
result.add(clazz.cast(o));
return result;
}
MyClass वास्तव में दिलचस्प नहीं है, इसकी एक खाली वर्ग SuperInterface.SubInterface
से लागू करने और मुख्य में इस टुकड़े:
ArrayList<Object> mObjects = new ArrayList<Object>() {
{
add(new MyClass()); //SuperInterface.SubInterface
add(Integer.valueOf(5));
add(new String("Hello"));
add(new Object());
}
};
ArrayList<SuperInterface> mSuperInterfaces = Toolkit.getSome(mObjects, SuperInterface.class); //returns a zero-sized list.
ArrayList<SuperInterface.SubInterface> mSubInterfaces = Toolkit.getSome(mObjects, SuperInterface.SubInterface.class); //returns a one-sized list
पहली विधि कॉल काम नहीं करता है जैसा कि मैंने आशा की थी, दूसरा करता है। क्या यह संभव है कि पहला व्यक्ति subinterfaces को एक अलग फ़ाइल में स्पष्ट रूप से डालने और सुपरक्लास को लागू किए बिना काम करता है? क्योंकि जाहिरा तौर पर subinterfaces नहीं हैं वास्तव में subinterfaces, तो मैं इस तरह इंटरफ़ेस वर्ग करने की कोशिश की:
public class ClassWithInterfaces {
public interface Super { }
public interface Sub implements Super { /**...*/ }
}
लेकिन जाहिरा तौर पर आप एक आंतरिक इंटरफ़ेस में implements
उपयोग नहीं कर सकते।
मेरा प्रश्न है: क्यों है, और क्या मैं हासिल करना चाहता हूं (एक फ़ाइल में आंतरिक इंटरफेस) को पूरा करने का कोई तरीका है? मुझे जरूरी नहीं है कि मैं केवल यह जानना चाहता हूं कि आंतरिक इंटरफेस में कार्यान्वित करना क्यों संभव नहीं है (फिर भी आंतरिक कक्षाओं का विस्तार करना संभव है)।
चूंकि इंटरफ़ेस से विस्तार करना संभव है? मैंने सोचा कि कीवर्ड अमूर्त वर्गों और इंटरफेस के बीच अंतर करने के लिए लागू होते हैं और विस्तार करते हैं? – stealthjong
@ क्रिसिस्टेन्जोंग: एक इंटरफेस हमेशा * अन्य इंटरफेस बढ़ाता है, यह * उन्हें * लागू नहीं करता है। केवल एक वर्ग चीजों को लागू कर सकता है। – NPE
अब जब आप इसका जिक्र करते हैं, तो यह वास्तव में काफी तार्किक है। बहुत बहुत धन्यवाद। – stealthjong