大可制作:QQ群:31564239(asp|jsp|php|mysql)

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;
}
}