2007年1月25日 星期四

F-bounded polymorphism in Java 1.5

剛剛在寫code時遇到一個需求
Class A extends Car{}
Class B extends Car{}
Class C extends Car{}
Class ListA extends List<A>{}
Class ListB extends List<B>{}
Class ListC extends List<C>{}

各位應該可以看到,ListA是專門容納class A的容器,以下類推。

若是某些method的內容會操作到特定List與其member,且內容一模一樣:
public void mA(ListA la, A a){
...
la.add(a);
}

public void mB(ListB lb, B b){
...
lb.add(b);
}

public void mC(ListC lc, C c){
...
lc.add(c);
}

在JAVA 1.5之前,因為沒有Generic Type,因此想幫上列三種method整合為一是不可能的。這個問題我們可以用F-bounded polymorphism來解釋它。

在Java 1.5,我們可以用以下的method合併mA mB mC:

public void <T extends Car> mX(List<T> lt, T t){
...
lt.add(t)
}

Java真是厲害呀!

沒有留言: