Извините за загадочный заголовок, но это трудно объяснить.Общее правило заключается в том, что мне нужен ленивый загрузчик, который даст мне N экземпляров типа с подстановочными знаками.Я называю ленивый загрузчик единицей хранения.
import java.util.ArrayList;
import java.util.List;
public class StorageUnit<T extends MyInterface> implements Storable<T> {
private int count;
public StorageUnit(int count) {
this.count = count;
}
private List<T> storables = new ArrayList<T>();
public List<T> getInstances(Class<T> c) {
try {
if (storables.size() == 0) {
for (int i = 0; i < count; i++) {
storables.add(c.newInstance());
}
} else {
return storables;
}
}catch (IllegalAccessException illegalAccessException) {
illegalAccessException.printStackTrace();
} catch (InstantiationException instantiationException) {
instantiationException.printStackTrace();
}
return storables;
}
}
В другом месте в моем приложении у меня есть другой класс, который имеет ссылку на несколько таких единиц хранения.Мне нужно получить экземпляры типа блока хранения, а затем я сделаю что-то с этим типом.
import java.util.ArrayList;
import java.util.List;
public class MyStorageUnitContainer {
private List<StorageUnit<? extends MyInterface>> storageUnits;
public MyStorageUnitContainer(List<StorageUnit<? extends MyInterface>> storageUnits) {
this.storageUnits = storageUnits;
}
public List<StorageUnit<? extends MyInterface>> getInstances() {
List<StorageUnit<? extends MyInterface>> instances = new ArrayList<StorageUnit<? extends MyInterface>>();
for (StorageUnit<? extends MyInterface> storageUnit : storageUnits) {
storageUnit.getInstances(/* I can't get the bound wildcard... */);
// Now loop through those instances and do something with them...
}
return instances;
}
}
Этот код отстой, поэтому лучшая аналогия, которую я могу придумать, - это фактический контейнер блока хранения.В этом контейнере единиц хранения есть несколько отдельных единиц хранения.Каждая из этих коробок содержит предметы определенного типа (например, бейсбольные карточки).Я знаю, что в коробке 100 бейсбольных карточек, но пока я не открою коробку, я ничего не знаю о деталях каждой бейсбольной карточки.Я в основном пытаюсь рассматривать каждую коробку как ленивый загрузчик.Открытие поля загружает N реализаций, если они еще не существуют.