-3

一个新的 java 组件,假设将预定义变量列表发送给外部方。然后,用户将能够定义他们想要通过 xml 属性文件发送的变量(一组固定的变量)

问题是:预定义变量在一个类中,并且与它一起具有业务逻辑,我无法更改或利用(外部 api 的一部分)。例如如下:

public class DataColumn implement java.io.Serializable{
    public static final String _actionID = "ActionID";
    public static final String _actionName = "ActionName";
    public static final String _actionDesc = "ActionDescription";
    public static final DataColumn ActionDesc = new DataColumn (_actionDesc);
    public static final DataColumn ActionID = new DataColumn (_actionID);
    public static final DataColumn ActionName = new DataColumn (_actionName);

    ....and about 100 other variale more

    protected WebMediaReportColumn(java.lang.String value) {
       _value_ = value;
       _table_.put(_value_,this);
    } 
}

用户将在 xml 文件中定义如下:

<interface>
    <fields isRequired="true">
        <field>ActionID</field>
        <field>ActionName</field>
        <field>ActionDescription</field>
     </fields>
</interface>

为了设置要发送的变量,代码如下所示:

interface.setColumns(new DataColumn[] { 
    DataColumn.ActionID, DataColumn.ActionName, DataColumn.ActionDesc
    }
);

问题是:如何最好地编写一个可以基于用户在属性文件中定义的程序,并相应地创建 Datacolumn[] 数组? 使用 If else 块太长且难以维护。

4

1 回答 1

0

将所有这些语句写入属性文件。

actionID = ActionID
actionName = ActionName
actionDesc = ActionDescription
/*... and so on */

在您的代码中创建一个 Properties 对象并将此文件加载到其中。创建一个字符串数组并填充此属性对象的值。

  Properties p = new Properties();
  /*...load the file...*/
  String []columnData = new String[p.keySet().size()];
  int i=0;
  for(Object str : p.keySet()) {
    columnData[i++]=(String)p.getProperty((String)str);
  }

  /*now call the method and pass the array*/ 
  interface.setColumns(columnData);
于 2012-12-27T09:30:27.033 回答