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
0
A
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.
-1
Java 8 Sammler Gruppierung von in obigem Fall
https://www.mkyong.com/java8/java-8-collectors-groupingby-and-mapping-example/
Verwandte Themen
- 1. Funktion Anmerkung für Unterklassen der abstrakten Klasse
- 2. Java - Binärkompatibilität der abstrakten Klasse und Unterklassen
- 3. Supereigenschaften mit abstrakten Unterklassen setzen
- 4. Verfügbarmachen von WCF-Unterklassen basierend auf einer abstrakten Klasse
- 5. Welche Einschränkungen gibt es bei Unterklassen einer abstrakten Klasse?
- 6. Unterklassen der abstrakten Klasse können in Implementierungen einer abstrakten Methode nicht zurückgegeben werden
- 7. Klassenname von der abstrakten Klasse mit dem gleichen Anstand erweitern
- 8. Konkrete Klasse erben von der abstrakten Klasse, die von der generischen abstrakten Klasse erbt
- 9. Sort ArrayList von Objekten, die Instanzen von Unterklassen der abstrakten Klasse sind
- 10. Wie Enum-Klasse von abstrakten Klasse zu erweitern?
- 11. Exakte Verwendung der abstrakten Klasse
- 12. Wie man zu einer abstrakten Klasse von der Erweiterung
- 13. Array der abstrakten Klasse
- 14. Wie kann ich erzwingen, dass ein Konstruktor in allen Unterklassen meiner abstrakten Klasse definiert ist
- 15. Mehrere UITableViewCell-Unterklassen mit der gleichen XIB?
- 16. Erstellen von Methoden in einer abstrakten Klasse
- 17. Array-Liste der abstrakten Klasse?
- 18. C++ Vergleichen von Nachkommen der abstrakten Klasse
- 19. Interface von der abstrakten Klasse generieren
- 20. Verweisen auf Unterklasse von abstrakten Klasse
- 21. Anmerkungen von der abstrakten Klasse übernehmen?
- 22. Jaxb -Unmarshalling der abstrakten Liste in der abstrakten Klasse
- 23. @Autowired Werke in einer abstrakten Klasse
- 24. Was ist der Unterschied zwischen Objekt einer abstrakten Klasse und Liste von Objekten der abstrakten Klasse?
- 25. Wie zwei Instanzen einer Klasse zu unterscheiden
- 26. Modell einer abstrakten Basisklasse und Unterklassen in einer Datenbank
- 27. Wert von einer abstrakten Klasse
- 28. ModelAttribute in abstrakten Klasse mit Wert aus der Unterklasse
- 29. autofac Registrieren geschlossene Unterklassen von abstrakten öffnen generische
- 30. Klasse Constructor von einer abstrakten Klasse
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
[Sie könnten das Besuchermuster implementieren] (https://stackoverflow.com/questions/29458676/how-to-avoid-instanceof-when-implementing-factory -design-pattern/29459571 # 29459571) –
@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. –