Возможно, я загнал себя в угол с этой проблемой, но я чувствую, что есть практичное известное решение для чего-то такого, чего я не вижу. Вполне может быть, что я полностью усложнил проблему и пропустил очевидное решение. Любой совет будет принята с благодарностью.
У меня есть набор объектов, определенных как интерфейсы. У каждого есть конкретная реализация и реализация оболочки. Например:
-- Foo.java
public interface Foo {
public String getName();
}
-- FooImpl.java
public class FooImpl implements Foo {
private String name;
public String getName() {
return name;
}
}
-- AbstractWrapper.java
public class AbstractWrapper {
protected String decorate(String text) {
return "** " + text + " **";
}
-- FooWrapper.java
public class FooWrapper extends AbstractWrapper implements Foo {
private Foo wrappedFoo;
public FooWrapper(Foo wrappedFoo) {
this.wrappedFoo = wrappedFoo;
}
public String getName() {
return decorate(wrappedFoo.getName());
}
}
Теперь, часть, которая усложняет ситуацию, состоит в том, что я пытаюсь создать List, который автоматически добавляет соответствующий тип в соответствующую оболочку перед его добавлением. Что-то вроде:
-- WrappingList.java
/** T is the base entity interface type. */
public class WrappingList<T> implements List<T> {
private List<T> wrappedList;
public WrappingList(List<T> wrappedList) {
this.wrappedList = wrappedList;
}
....
public boolean add(T item) {
return wrappedList.add(wrapItem(item));
}
protected T wrapItem(T item) {
T wrappedItem = .....;
return T;
}
}
Есть ли что-нибудь, что я могу сделать, чтобы сделать несколько более чистый фабричный метод здесь? Или мне уже не повезло из-за стирания типа?