ITEEDU

Java Gossip: 扩充泛型类别、实作泛型接口

您可以扩充一个泛型类别,保留其型态持有者,并新增自己的型态持有者,例如先写一个父类别:

GenericFoo.java
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;
	}
}

再来写一个子类别扩充上面的父类别:

SubGenericFoo.java
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,建议当然是父类别的型态持有者都保留。

接口实作也是类似,例如先定义一个接口:

IFoo.java
public interface IFoo<T1, T2> {
	public void setFoo1(T1 foo1);
	public void setFoo2(T2 foo2);
	public T1 getFoo1();
	public T2 getFoo2();
}

实作时如下,保留所有的型态持有者:

GenericFoo.java
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;
	}
}