Java 阵列的动态生成

Java 阵列的动态生成,java,arrays,dynamic,Java,Arrays,Dynamic,我需要根据从用户收集的命令生成数组 例如 如果用户先输入“数组类型” 我的阵列将是 processors = new Processor[] {new object_a(),object_b(2,3),object_c()}; processors = new Processor[] {new object_e(),object_f(3),object_g("fdf")}; 否则,如果用户输入“second数组类型” 我的阵列将是 processors = new Processor[] {

我需要根据从用户收集的命令生成数组
例如 如果用户先输入“数组类型” 我的阵列将是

processors = new Processor[] {new object_a(),object_b(2,3),object_c()};
processors = new Processor[] {new object_e(),object_f(3),object_g("fdf")};
否则,如果用户输入“second数组类型” 我的阵列将是

processors = new Processor[] {new object_a(),object_b(2,3),object_c()};
processors = new Processor[] {new object_e(),object_f(3),object_g("fdf")};

我不想写一个大的if-else结构 如何根据配置文件和用户输入动态生成阵列

我不认为if语句在这种情况下会太糟糕。不过,您可以使用三元运算符:

processors = userChoice
        ? new Processor[] { new object_a(), object_b(2,3), object_c() }
        : new Processor[] { new object_e(), object_f(3),   object_g("fdf") };

或者,如果您想要更细粒度的控制,您可以这样做

Processor[] chosenProcessors = (new ArrayList<Processor>() {{

    if (option1) add(new object_a());
    ...
    if (optionN) add(new object_N());

}}).toArray(new Processor[0]);
Processor[]chosenProcessors=(新的ArrayList(){{
如果(选项1)添加(新对象_a());
...
如果(选项N)添加(新对象N());
}}).toArray(新处理器[0]);
您可以使用地图:

//Build Data-Map
Map<String, Processor[]> processorTypes = new HashMap<String, Processor[]>();
processorTypes.put("first", new Processor[] {new object_a(),object_b(2,3),object_c()});
processorTypes.put("second", new Processor[] {new object_e(),object_f(3),object_g("fdf")});

//Get setup
String userAnswer = getByUser();
Processor[] processors = processorTypes.get(userAnswer);
//构建数据映射
Map processorTypes=新HashMap();
put(“first”,新处理器[]{new object_a(),object_b(2,3),object_c()});
processorTypes.put(“second”,新处理器[]{new object_e(),object_f(3),object_g(“fdf”)});
//设置
字符串userAnswer=getByUser();
Processor[]processors=processorTypes.get(userAnswer);

假设您将配置文件设置为某种XML(或任何格式),并为每个设置和数组元素及其属性设置名称:

<processor-config name="first">
    <object type="a"/>
    <object type="b">
        <argument value="2">
        <argument value="3">
    </object>
    <object type="c"/>
</processor-config>
objectList
这里是一些
ObjectWrapper
bean的列表,这些bean保存对象配置的数据(对应于XML
object
元素):类型和参数,还知道如何根据其状态创建处理器

一旦有了这个,您就可以解析XML文件并持有
String
->
ProcessorConfig
的映射,因此根据用户输入,您可以简单地编写:

configMap.get(userInputString).createProcessors()
当然,您应该检查null,而不是像上面那样调用方法,但我希望它尽可能简短


编辑:如果您可以在项目中使用Spring IoC容器,直接将这些
ProcessorConfig
实例定义为映射中的bean,而不必自己解析XML,那么这将容易得多。

您的配置文件不必列出所有的组合吗?可以使用反射来创建对象和阵列。这可能是有用的Theomega,我们能不能有一个完整的例子一个完整的例子缺少什么?你有什么问题?