您可以扩充一个泛型类别,保留其型态持有者,并新增自己的型态持有者,例如先写一个父类别:
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; } }