2017-10-20 7 views
0

Stellen Sie sich vor, ich habe eine Klasse namens Auto und eine Reihe von Unterklassen, die Auto wie BMW, Ford, etc. Also habe ich diese ArrayList von Autos und ich versuche, jedes Objekt in dieser ArrayList zu verschiedenen ArrayLists zu trennen, eins für jede Marke. Ich habe gehört, dass es keine gute Übung ist, eine Instanz zu verwenden, also habe ich keine Ahnung, wie ich das machen soll.wie Unterklassen von der gleichen abstrakten Klasse zu unterscheiden

+1

nützlich sein, was Sie unter "Ich habe gehört, meint mich, dass die Verwendung Instanz ist keine gute Praxis, so habe ich keine Ahnung, wie dies zu tun. ". Sie könnten in Ihrer Basisklasse eine Eigenschaft namens Model hinzufügen. Dann würden Sie mithilfe dieser Eigenschaft Objekte aus Ihrer Liste extrahieren. Ich würde personally etwas tun wie myobjects.OfType () ... – Seb

+1

[Sie könnten das Besuchermuster implementieren] (https://stackoverflow.com/questions/29458676/how-to-avoid-instanceof-when-implementing-factory -design-pattern/29459571 # 29459571) –

+0

@Seb meine Lehrer sind keine Fans von uns mit Instanz von. Ich dachte über das Hinzufügen einer Eigenschaft nach, aber ich möchte Polymorphie verwenden, um dieses Problem zu lösen. –

Antwort

0

Ich weiß nicht wirklich, wie man diesen Polymorphiegebrauch löst, aber ich schlage vor, instanceof nicht zu verwenden und Map stattdessen mit der Klasse des Autos und der Liste der Autos als Argumente zu verwenden.

In diesem Fall sollte der Code in etwa so aussehen:

private static Collection<List<Car>> separateCars(List<Car> cars) { 
    Map<Class, List<Car>> result = new HashMap<>();  // creating the empty map with results 
    for (Car car : cars) {        // iterating over all cars in the given list 
     if (result.containsKey(car.getClass())) {  // if we have such car type in our results map 
      result.get(car.getClass()).add(car);  // just getting the corresponding list and adding that car in it 
     } else {          // if we faced with the class of the car that we don't have in the map yet 
      List<Car> newList = new ArrayList<>();  // creating a new list for such cars 
      newList.add(car);       // adding this car to such list 
      result.put(car.getClass(), newList);  // creating an entry in results map with car's class and the list we just created 
     } 
    } 

    return result.values();  // returning only the lists we created as we don't need car's classes 
} 

Hoffnung, die Ihnen helfen.

Verwandte Themen