我有一个这样的界面:
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
第一个方法调用不像我希望的那样工作,第二个方法调用。是否有可能使第一个工作而不显式地将子接口放在不同的文件中并实现超类?因为显然子接口并不是真正的子接口,所以我尝试制作这样的接口类:
public class ClassWithInterfaces {
public interface Super { }
public interface Sub implements Super { /**...*/ }
}
但显然你不能implements
在内部界面中使用。
我的问题是:为什么会这样,有没有办法完成我想要实现的目标(一个文件中的内部接口)?我不一定需要它,我只是想知道为什么不能在内部接口中实现(但可以扩展内部类)。