Я очень новичок в дженериках Java и потратил непомерное количество времени в поисках подходящего решения (если есть).
Я пытаюсь разработать адаптеры, которые обрабатывают объекты определенного типа класса. Как описано ниже, класс CAdapter обрабатывает только объекты "CClass". Я пытаюсь предоставить абстрактный универсальный адаптер, который обрабатывает большую часть работы (так же, как коллекции Java, такие как LinkedList). Затем я предоставляю конкретную реализацию адаптера для каждого поддерживаемого типа.
// Classes
public interface AInterface {
public String toString();
}
public class BClass extends AInterface {
public String toString() { return "BClass "; }
}
public class CClass extends AInterface {
public String toString() { return "CClass"; }
}
// Adapters
public interface AdapterInterface<T extends AInterface> {
public T getInterface();
}
public class BAdapter implements AdapterInterface<BClass> {
private BClass aInterface = null;
public BClass getInterface() { return aInterface; }
}
public class CAdapter implements AdapterInterface<CClass> {
private CClass aInterface = null;
public CClass getInterface() { return aInterface; }
}
Во-первых, я прочитал, что предоставление КОНКРЕТНОЙ реализации для такого универсального адаптера осуждается (что-то о том, что Бог убил котенка)! Может быть, кто-нибудь мог бы расширить это?
Во-вторых, я столкнулся с проблемой динамического создания экземпляра адаптера и отсутствия жалоб компилятора Java. Например, у меня есть метод:
public <T extends AInterface> AdapterInterface<T> getAdapter(String type) {
AdapterInterface<T> result = null;
if (type.equals("C") {
result = new CAdapter();
}
return result;
}
Конечно, компилятор будет жаловаться на несоответствие CAdapter. Учитывая любой тип объекта AInterface, я хотел бы иметь возможность загрузить правильный адаптер и обработать его соответствующим образом. Я не в состоянии понять фабричный образец, чтобы достигнуть этого.
Любые мысли будут с благодарностью.