gpt4 book ai didi

Java 泛型 : why can't inner interface implement from a (inner) superinterface?

转载 作者:搜寻专家 更新时间:2023-10-31 19:47:45 32 4
gpt4 key购买 nike

我有一个这样的界面:

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

第一个方法调用没有像我希望的那样工作,第二个方法调用。是否有可能使第一个工作没有明确地将子接口(interface)放在不同的文件中并实现父类(super class)?因为显然子接口(interface)不是真正的子接口(interface),所以我尝试像这样创建接口(interface)类:

public class ClassWithInterfaces {
public interface Super { }
public interface Sub implements Super { /**...*/ }
}

但显然您不能在内部接口(interface)中使用implements

我的问题是:为什么会这样,是否有办法实现我想要实现的目标(一个文件中的内部接口(interface))?我不一定需要它,我只是想知道为什么它不能在内部接口(interface)中实现(但可以扩展内部类)。

最佳答案

But apparently you can't use implements in an inner interface.

您正在寻找extends 而不是implements:

public class ClassWithInterfaces {
public interface Super { }
public interface Sub extends Super { /**...*/ }
}

这为我编译,我当然可以实现这两个接口(interface)。

由于扩展与实现之间似乎存在一些混淆,以下内容可能有助于澄清问题:

  • 一个接口(interface)扩展另一个接口(interface)。
  • 一个类实现一个接口(interface)。
  • 一个类扩展另一个类。

关于Java 泛型 : why can't inner interface implement from a (inner) superinterface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13818592/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com