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真是厲害呀!
沒有留言:
張貼留言