有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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的类型(即GeneratedClassAGeneratedClassB)。似乎类型擦除可能会使这变得不可能,但是如果有这个DecoratorBundle类来完全管理它的bundle数组,那就太好了。它目前能够实例化数组,但我想让它创建一个新的GeneratedDecorator类型,并在setRow方法中分配它

如果我在这个问题上完全错了,那么我希望听到另一个想法


共 (0) 个答案