代码之家  ›  专栏  ›  技术社区  ›  Tim Reddy

通常为存储在数组中的装饰对象提供setter

  •  1
  • Tim Reddy  · 技术社区  · 7 年前

    假设我有一套 无关,生成 我想去上课 Decorate

    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 装饰包 bundle 数组。它目前能够实例化数组,但是我想让它用某种方法来创建一个新的 发电机发电机 -在一个 setRow 方法。

    如果我在这件事上完全错了,那么我很乐意听到另一个想法。

    0 回复  |  直到 7 年前