具体的には、オブジェクトのリストがあります。オブジェクトのそのクラスの各サブクラスは、特定の機能に関連付けられています。
これがこの問題に対する私の単純な解決策であり、それは醜いです:
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>)
}