Supposons que j'ai:Existe-t-il un moyen meilleur/plus propre de créer un type avec condition que d'utiliser instanceof? [Java]
public class FightingZone<MobileSuitso, Background> {
private MobileSuitCollection<MobileSuitso> msCollection;
private BackgroundInfo<Background> bgInfo;
public FightingZone(MobileSuitCollection<MobileSuitso> newCollection, BackgroundInfo<Background> newInfo) {
this.msCollection = newCollection;
this.bgInfo = newInfo;
}
...
...// inside a method
MobileSuitCollection temporaryCollection = new MobileSuitCollection<MobileSuitso>(); // /!\
}
Le problème est MobileSuitCollection est une interface, je ne peux pas instancier. Par exemple, je pouvais faire:
MobileSuitCollection temporaryCollection = new GundamMeisterCollection<MobileSuitso>();
MobileSuitCollection temporaryCollection = new InnovatorCollection<MobileSuitso>();
MobileSuitCollection temporaryCollection = new CannonFolderCollection<MobileSuitso>();
etc. Cependant, pour manipuler temporaryCollection
, je en ai besoin d'être du même type que celui passé par paramètre à ma classe. J'ai donc pensé à faire ceci:
if (msCollection instanceof GundamMeisterCollection) {
...
} else if (msCollection instanceof InnovatorCollection) {
...
} ...
Je réalise que c'est affreux cependant. Y a-t-il une meilleure manière de faire cela? Serait-il possible de conserver une référence à la classe utilisée par le type initial, puis d'instancier le temporaryCollection
avec cela?
Je cherchais à utiliser Reflection pour obtenir le nom de classe et l'instancier à partir de là. Supposons que cela soit possible, cela ne rendrait-il pas le code plus propre? Ou est-ce toujours l'approche préférée? –
Si vous utilisez Reflection, utilisez l'objet de classe au lieu du nom de classe. Comme ça: 'Classe cl = collection.getClass(); Interface inst = cl.newInstance();' –
La réflexion devrait être le dernier recours. L'approche ci-dessus est l'approche orientée objet. – Bozho