您可以扩充一个泛型类别,保留其型态持有者,并新增自己的型态持有者,例如先写一个父类别:
public class GenericFoo<T1, T2> {
private T1 foo1;
private T2 foo2;
public void setFoo1(T1 foo1) {
this.foo1 = foo1;
}
public T1 getFoo1() {
return foo1;
}
public void setFoo2(T2 foo2) {
this.foo2 = foo2;
}
public T2 getFoo2() {
return foo2;
}
}
再来写一个子类别扩充上面的父类别:
public class SubGenericFoo<T1, T2, T3>
extends GenericFoo<T1, T2> {
private T3 foo3;
public void setFoo3(T3 foo3) {
this.foo3 = foo3;
}
public T3 getFoo3() {
return foo3;
}
}
如果决定要保留型态持有者,则父类别上宣告的型态持有者数目必须齐全,也就是说上式中,T1与T2都要出现,如果不保留型态持有者,则继承下来的T1与 T2自动变为Object,建议当然是父类别的型态持有者都保留。
接口实作也是类似,例如先定义一个接口:
public interface IFoo<T1, T2> {
public void setFoo1(T1 foo1);
public void setFoo2(T2 foo2);
public T1 getFoo1();
public T2 getFoo2();
}
实作时如下,保留所有的型态持有者:
public class GenericFoo<T1, T2> implements IFoo<T1, T2> {
private T1 foo1;
private T2 foo2;
public void setFoo1(T1 foo1) {
this.foo1 = foo1;
}
public T1 getFoo1() {
return foo1;
}
public void setFoo2(T2 foo2) {
this.foo2 = foo2;
}
public T2 getFoo2() {
return foo2;
}
}