2013-04-15 53 views
2

我想從我的類數據源讀取參數的引用閱讀字符串作爲一個變量

public static void changeParameter(String param, double value) { 
    String parameter = param.toUpperCase(); // uppercase to match the final variable from Datasource 

    InputStream inp = new FileInputStream(Datasource.EXCELFILENAME); 
    // Excelconnection 
    Workbook wb = WorkbookFactory.create(inp); 
    String sheetName = "Datasource." + parameter + "_SHEET"; 
    Sheet sheet = wb.getSheet(sheetName); 
    String excelCell = "Datasource." + parameter + "_LOC"; 
    int rowInt = getRow(excelCell); 
    Row row = sheet.getRow(rowInt); 
    int cellInt = getCell(excelCell); 
    Cell cell = row.createCell(cellInt); 
    cell.setCellValue(value); 
    // Write the output to a file 
    FileOutputStream fileOut = new FileOutputStream(Datasource. EXCELFILENAME); 
    wb.write(fileOut); 
    fileOut.close(); 
} 

的getRow和getCell都採用String作爲參數來獲取Excelrow和Excelcolumn。有誰知道我怎麼能達到這些字符串SHEETNAME和excelCell不被視爲一個字符串,但是從數據源的一個引用字符串(以便例如「C6」被訪問,而不是「Datasource.M_LOC」?

回答

2

您可以使用反射此。

Class clazz = DataSource.class; 
Field field = clazz.getField("M_LOC"); // use getDeclaredField if the field isn't public 
String str = (String)field.get(null); // it's a static field, so no need to pass in a DataSource reference 

或者,把一個HashMap的數據源與現場名作爲關鍵字和字段值的值。

我相信getFieldgetDeclaredField是線性時間的方法,所以如果可能的話,你應該緩存他們的結果。

+0

謝謝,這幫了我很多! – Lars

2

如果你要通過字符串引用東西,爲什麼要將它們作爲單個變量來存儲?爲什麼不使用Map<String, String>?這樣,當您需要訪問"Datasource.M_LOC"引用的字符串時,您可以使用

Map<String,String> referenceMap; 
... 
referenceMap.get(parameter+"_LOC"); 
相關問題