如何编写可配置的Java变量创建

时间:2012-12-27 09:19:39

标签: java

一个新的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块太长且难以维护。

1 个答案:

答案 0 :(得分:0)

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

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

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

  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);