【发布时间】:2010-11-22 11:06:02
【问题描述】:
我有以下 JAVA 乱七八糟的东西,我不太清楚:
具有两个泛型 A 和 B 的泛型接口,例如 AIter<A,B>
另一个泛型接口和一个额外的泛型类型 C,像这样:BIter<A,B,C> extends AIter<A,B>
一个泛型类ClassA<D>,它递归地将第一个接口AIter实现为一个内部类,如下所示:ThisIter implements AIter<Something,ThisIter>
另一个泛型类ClassB<D,E>,它递归地将第二个接口 BIter 实现为内部类,如下所示:ThisIter implements BIter<Something,ThisIter,SomethingElse>
这两个类都有一个名为 public ThisIter giveIter(); 的函数,它应该返回内部类的一个实例(每个内部类都有一个类似的函数,它也返回一个自身的新实例,但参数不同)。
是否可以将 ClassB 实现为 ClassA 的子类型? (假设泛型Types相同,如ClassA<MyString>和ClassB<MyString, somethingelse>)
我似乎无法实现,因为 ThisIter 的实例以及 giveIter() 的返回类型不兼容。
一般来说,子接口(n)的实现是接口本身实现的子类型吗?
IterA
public interface IterA<A,B> {}
IterB
public interface IterB<A,B,C> extends IterA<A,B> {}
A 类:
public class ClassA<L> {
Node root;
public ClassA() {
root= new Node();
}
protected class Node {
/*...*/
}
protected class Edge {
/*...*/
L varL;
}
protected class ThisIter implements IterA<Edge,ThisIter> {
/*...*/
}
public IterA<Edge,ThisIter> assoc() {
return new ThisIter(root);
}
}
B 类:
public class ClassB<L,N> {
Node root;
public ClassB() {
root= new Node();
}
protected class Node {
/*...*/
N varN;
}
protected class Edge {
/*...*/
L varL;
}
protected class ThisIter implements IterB<Edge,ThisIter,N> {
/*...*/
}
public IterB<Edge,ThisIter,N> assoc() {
return new ThisIter(root);
}
}
【问题讨论】:
标签: java generics inheritance interface subtype