Ho un interfaccia come questa:Generici Java: perché l'interfaccia interna non può essere implementata da una superinterfaccia (interna)?
public interface SuperInterface {
public interface SubInterface {
public void get();
}
//**More interfaces*/
}
questo metodo nel mio Toolkit, che recupera tutti gli oggetti che sono istanza di una certa classe:
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 non è davvero interessante, il suo un vuoto classe che implementa da SuperInterface.SubInterface
E questo pezzo nella principale:
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
La prima chiamata al metodo non funziona come speravo, il secondo sì. È possibile che il primo funzioni senza esplicitamente inserire le subinterfacce in un file diverso e implementare la superclasse? Perché a quanto pare le sottointerfacce non sono realmente subinterfaces, così ho cercato di rendere la classe di interfaccia come questa:
public class ClassWithInterfaces {
public interface Super { }
public interface Sub implements Super { /**...*/ }
}
Ma a quanto pare non è possibile utilizzare implements
in un'interfaccia interna.
La mia domanda è: Perché è che , e c'è un modo per realizzare ciò che voglio raggiungere (interfacce interne in un unico file)? Non ne ho necessariamente bisogno, voglio solo sapere perché non è possibile implementare le interfacce interne (eppure è possibile estendere le classi interne).
Da quando è possibile estendere da un'interfaccia? Ho pensato che le parole chiave si implementino e si estendano là dove distinguere tra classi astratte e interfacce? – stealthjong
@ChristiaandeJong: un'interfaccia sempre * estende * altre interfacce, mai * le implementa *. Solo una classe può implementare le cose. – NPE
Ora che ne parli, in realtà è abbastanza logico. Grazie mille. – stealthjong