如何实例化对象并将其传递给循环中的其他构造函数

How to instantiate objects and passing it to other constructors in a loop

老实说,这是一个关于逻辑的问题,但我想不出答案。基本上,我有这段代码可以加载装饰器并将 Class 存储在 decoratorConstructors:

                Collection<String> decorators = (Collection<String>) (((javax.swing.JButton)e.getSource()).getClientProperty( "selectedDecoratorsNames"));
                ArrayList<Constructor> decoratorConstructors = new ArrayList();
                String interfaceClassName = "interfaces.PizzaComponent";
                Class interfaceClass = null;
                Method interfaceMethodPrepare = null;
                
                for(String decorator: decorators) {
                    Constructor decoratorConstructor;
                    Class metaFactory = null;
                    String decoratorName = decoratorNames.get(decorator);
                    String className = decoratorName + "." + decorator;
                    
                    interfaceClass = Class.forName(interfaceClassName, true, sysLoader);
                    metaFactory = Class.forName(className, true, sysLoader);
                    interfaceMethodPrepare = interfaceClass.getDeclaredMethod("preparar");
                    
                    decoratorConstructors.add(metaFactory.getConstructor(interfaceClass));
                }
                
                Object interfaceObject = interfaceClass;
                
                System.out.println(decoratorConstructors);
                
                Object pizza = interfaceClass.cast(decoratorConstructors.get(2).newInstance(
                        decoratorConstructors.get(1).newInstance(
                                decoratorConstructors.get(0).newInstance(
                                        new PizzaSimples()
                                )       
                        )
                ));

                
                interfaceMethodPrepare.invoke(pizza);

我怎么 运行 循环中的这段代码:

                Object pizza = interfaceClass.cast(decoratorConstructors.get(2).newInstance(
                        decoratorConstructors.get(1).newInstance(
                                decoratorConstructors.get(0).newInstance(
                                        new PizzaSimples()
                                )       
                        )
                ));

好吧,我已经成功地完成了我想做的事情。我使用了递归函数:

            Object pizza = instantiate(decoratorConstructors, interfaceClass, decoratorConstructors.size() - 1, pizzaSimplesConstructor);

            private Object instantiate(ArrayList<Constructor> decoratorConstructors, Class interfaceClass, int i, Constructor pizzaSimplesConstructor) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
                Object pizza = null;
                
                if(i > -1) {
                    System.out.println("\nInstanciando " + decoratorConstructors.get(i));
                    pizza = decoratorConstructors.get(i).newInstance(instantiate(decoratorConstructors, interfaceClass, --i, pizzaSimplesConstructor));
                    return pizza;
                }else {
                    return pizzaSimplesConstructor.newInstance();
                }
            }