class SingleTon{
Data<A> a;
Data<B> b;
Data<C> c;
// ... etc
class Data<O extends I<O>>{
O o;
public void update(O o){
this.o.update(o);
}
}
}
interface I<T>{
void update(T t);
}
class A implements I<A>{
private String a;
@Override
public void update(A a) {
this.a = a.a;
}
}
class B extends A implements I<B>{
private String b;
@Override
public void update(B b) {
super.update(b);
this.b = b.b;
}
}
class C implements I<C> {public void update(C c){}}
由于超级类和子类试图实现相同的接口但具有不同的类型参数,因此无法编译此代码。
接口我不能使用不同的类型参数(A,B)进行继承,有人可以解决此问题吗?
答案 0 :(得分:1)
使用这种层次结构无法解决:在B
中,您想使用两种不同的通用类型:i
和A
来实现B
接口。
泛型被设计为带来更多的类型安全性,这种可能的歧义消除了这种情况。从班级的客户那里,为什么update(B b)
有效但update(A a)
无效?
因此,编译器将永远不会接受它。
但是有了组合,您可以做到:
class B implements i<B>{
private A a;
private String b;
@Override
public void update(B b) {
super.update(b);
this.b = b.b;
}
}
现在,如果需要A a
实例,则可以使用B
字段。
答案 1 :(得分:0)
使用下面给出的继承模型,您将在i
中实现B
到A
的联系。您实际上不需要为i
实现class B<T>
。
请参见以下示例:
interface i<T> {
}
class A<T> implements i<T> {
}
class B<T> extends A<T> {
}
希望它可以帮助您了解结构!
答案 2 :(得分:0)
我不明白需要什么,但是此代码已编译))
interface i<T extends i<T>> {
void update(T t);
}
class A<Q extends A<Q>> implements i<Q> {
private String a;
@Override
public void update(A a) {
this.a = a.a;
}
}
class B<X extends B<X>> extends A<X> implements i<X> {
String b;
@Override
public void update(X b) {
super.update(b);
this.b = b.b;
}
}