0
具體來說,我有一個對象列表。該類對象的每個子類都與一個特定的功能相關聯。Java - 如何從超類的列表中乾淨地構造子類的列表?
這是我天真地解決了這個問題,這是醜陋:
List<SuperClass> superClasses = ...
List<Subclass1> obj1 = Lists.newArrayList();
List<Subclass1> obj2 = Lists.newArrayList();
List<Subclass1> obj3 = Lists.newArrayList();
List<Subclass1> obj4 = Lists.newArrayList();
...
for (SuperClass obj : superClasses) {
if (obj.getClass().equals(Subclass1.class)) {
obj1.add((Subclass1) obj);
}
}
//repeat for each subclass
我也嘗試過這樣的事情:
public Map<Class, List<SuperClass>> constructMap(List<SuperClass> superClasses);
但是這不能用於:
(List<Subclass1>) constructMap(superClasses).get(Subclass1.class)
cannot cast from List<SuperClass> to List<Subclass1>.
我註定了這裏的樸素代碼嗎?是否真的沒有聰明的方法來獲取超類對象列表並根據它們的實際類來處理它們?
這裏是我試圖解決的問題:
public Driver {
List<Fruit> fruits = collectAllFruit();
StemHandler.pullStem(fruitsThatAreApples, fruitsThatArePears);
ColorHandler.getColor(fruitsThatAreApples, fruitsThatAreOranges, fruitsThatArePears);
public interface Fruit {
getColor();
}
public class Apple implements Fruit {
getColor();
pullStem();
}
public class Orange implements Fruit {
getColor();
peel();
}
public class Pear implements Fruit {
getColor();
pullStem();
}
public interface FruitHandler {
}
public class StemHandler extends FruitHandler {
pullStem(List<Apple>, List<Pear>)
}
public class ColorHandler extends FruitHandler {
getColor(List<Apple>, List<Orange>, List<Pear>)
}
「能夠將它們全部擠入相同的簽名」正是這裏不適合我的東西。每個類代表一個命令,所以我所調用的是基於它的類。 – Jeremy 2013-04-11 00:56:42
@Jeremy應該有可能。發佈一個簡單的示例,說明您實際正在嘗試做什麼,並且有人可能會建議如何讓代碼具有多態性。打開對象的類型**真的**在OO圈子裏皺起了眉頭 – 2013-04-11 01:00:03
編輯添加一個例子。希望很明顯。這個問題正在爲處理者找到合適的成果。 – Jeremy 2013-04-11 01:10:50