2012-12-27 49 views
-3

一個新的java組件,它假設將一個預定義變量列表發送給外部方。然後,用戶可以定義他們想通過xml屬性文件發送哪個變量(一組固定的變量)如何編寫一個可配置的Java變量創建

問題是:預定義變量在一個類內部,並且具有與它一起的業務邏輯,我無法更改或使用(外部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塊太長,難以維護。

+7

是嗎?您有一個包含字符串的DataColumn []類型的數組 –

+0

代碼不能編譯。告訴我們你真的擁有什麼。 –

+0

ops ...掛在... – Reusable

回答

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

對不起,我剛剛發佈了錯誤的代碼。請再次參考代碼 – Reusable

+0

沒什麼大不了的。你可以使用這個代碼來模擬它,並相應地使用它。保持它爲自己的功課:-) –

+0

這很奇怪......我不能看到如何修改此代碼。原因是因爲數組是新的DataColumn [] < - 其中內部是DataColumn.ActionID。我如何甚至分配/定義XML屬性文件的DataColumn.ActionID? – Reusable

相關問題