は、私はこのようなインターフェイスを持っている:Javaジェネリック:内部インターフェイスが(内部)スーパーインターフェイスから実装できないのはなぜですか?
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のは本当に面白いではないが、その空
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
0:
SuperInterface.SubInterface
そしてメインで、この作品から実装するクラス
私が望むように最初のメソッド呼び出しはうまくいかず、2番目のメソッド呼び出しはうまくいきません。サブファイルを明示的に別のファイルに置いてスーパークラスを実装せずに、最初のサブセットを実行することは可能ですか? ので明らかにサブインターフェイスは本当にをサブインターフェイス、ので、私はこのようなインターフェイスクラスを作ってみましたではありません。
public class ClassWithInterfaces {
public interface Super { }
public interface Sub implements Super { /**...*/ }
}
しかし、どうやらあなたは内部インターフェイスでimplements
を使用することはできません。
私の質問は:なぜそれがなのですか?達成したいことを達成する方法がありますか?私は必ずしもそれを必要としません、なぜ私は内部のインターフェイスで実装することはできません(まだ内部クラスを拡張することは可能です)知ってほしいです。 Java言語仕様によると
いつインターフェイスから拡張できますか?私は、キーワードが実装され、抽象クラスとインタフェースを区別するためにそこに拡張すると思った? – stealthjong
@ChristiaandeJong:インタフェースは常に他のインタフェースを拡張し*ます*実装していません。クラスだけが物を実装できます。 – NPE
あなたはそれに言及したので、実際はかなり論理的です。どうもありがとう。 – stealthjong