Je me suis peut-être mal pris à l'idée de ce problème, mais j'ai l'impression qu'il existe une solution pratique à ce problème que je ne vois pas. Il se peut fort bien que je complique complètement le problème et que je saute la solution évidente. Tout avis serait grandement apprécié.Wrapper Factory en Java
J'ai un ensemble d'entités définies comme des interfaces. Chacun a une implémentation concrète et une implémentation de wrapper. Par exemple:
-- 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());
}
}
Maintenant, la partie qui est ce qui complique la situation est que je suis en train de faire une liste qui encapsule automatiquement le type approprié avec son emballage approprié avant de l'ajouter. Quelque chose comme:
-- 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;
}
}
Y at-il quelque chose que je peux faire pour faire une méthode d'usine un peu propre ici? Ou suis-je déjà pas de chance à ce stade en raison de l'effacement de type?
Je pense que c'est la réponse qui était dans ma tête et qui m'énerve que ça devrait être possible. Cela fonctionne vraiment ici. Merci! – Jon