【发布时间】:2009-03-27 18:41:30
【问题描述】:
我可能已经将自己设计为解决这个问题,但我觉得有一个可行的已知解决方案来解决我没有看到的类似问题。很可能是我完全把问题复杂化了,跳过了明显的解决方案。任何建议将不胜感激。
我有一组定义为接口的实体。每个都有一个具体的实现和一个包装器实现。例如:
-- 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;
}
}
我能做些什么来在这里制作一个有点干净的工厂方法吗?还是因为类型擦除,我现在已经不走运了?
【问题讨论】:
标签: java design-patterns generics collections type-erasure