java一般为存储在数组中的修饰对象提供setter
我可能会用最复杂的方式来处理这件事,但我希望我所做的在这里是有意义的
假设我有一组不相关的、生成的类,我想Decorate
它们来创建某种公共API。比如:
public abstract class GeneratedDecorator<T> {
private T generated;
public T getGenerated() { return generated; }
public void setGenerated(T generated) { this.generated = generated; }
public abstract String getString();
public static class ClassA extends GeneratedDecorator<GeneratedClassA> {
@Override
public String getString() { return getGenerated().getThisString(); }
}
public static class ClassB extends GeneratedDecorator<GeneratedClassB> {
@Override
public String getString() { return getGenerated().getADifferentString(); }
}
}
现在,要使用这个新的高级课程,我只想说:
GeneratedDecorator.ClassA a = new GeneratedDecorator.ClassA();
a.setGenerated(myGeneratedInstanceA);
a.getString();
好的,到目前为止,到目前为止。。。但是现在我想管理这些Decorators
的数组
让我们试试:
public abstract class DecoratorBundle<T extends GeneratedDecorator> {
private static final int MAX_ROWS = 10;
private T[] bundle;
DecoratorBundle() { bundle = createBundle(); }
public String getString(int index) { return bundle[index].getString(); }
public void setRow(??? generated, int index ) {
//check index of bundle, if null create a new instance of appropriate type and set bundle[index] = new instance
//call setGenerated on instance at index
}
protected abstract T[] createBundle();
public static class ClassA extends DecoratorBundle<GeneratedDecorator.ClassA> {
@Override
protected GeneratedDecorator.ClassA[] createBundle() {
return new GeneratedDecorator.ClassA[MAX_ROWS];
}
}
public static class ClassB extends DecoratorBundle<GeneratedDecorator.ClassB> {
@Override
protected GeneratedDecorator.ClassB[] createBundle() {
return new GeneratedDecorator.ClassB[MAX_ROWS];
}
}
}
这就是我被困的地方。。。我希望这个DecoratorBundle
有一个setRow(??? generated, int index)
,其中参数是GeneratedDecorator
的类型(即GeneratedClassA
或GeneratedClassB
)。似乎类型擦除可能会使这变得不可能,但是如果有这个DecoratorBundle
类来完全管理它的bundle
数组,那就太好了。它目前能够实例化数组,但我想让它创建一个新的GeneratedDecorator
类型,并在setRow
方法中分配它
如果我在这个问题上完全错了,那么我希望听到另一个想法
共 (0) 个答案