Предположим, у меня есть:
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>(); // /!\
}
Проблема в том, что MobileSuitCollection - это интерфейс, поэтому я не могу его создать. Например, я мог бы сделать:
MobileSuitCollection temporaryCollection = new GundamMeisterCollection<MobileSuitso>();
MobileSuitCollection temporaryCollection = new InnovatorCollection<MobileSuitso>();
MobileSuitCollection temporaryCollection = new CannonFolderCollection<MobileSuitso>();
и т.д.. Однако для манипулирования temporaryCollection
мне нужно, чтобы он был того же типа, что и тот, который был передан через параметр в мой класс. Вот я и подумал:
if (msCollection instanceof GundamMeisterCollection) {
...
} else if (msCollection instanceof InnovatorCollection) {
...
} ...
Однако я понимаю, что это ужасно. Есть лучший способ сделать это? Можно ли сохранить ссылку на класс, используемый начальным типом, а затем создать экземпляр temporaryCollection
с этим?