读取String作为变量的引用

时间:2013-04-15 21:02:47

标签: java string reference

我想从我的类Datasource中读取一个参数:

public class Datasource {
public final static String M = "M"; 
public final static String M_SHEET ="Config";
public final static String M_LOC = "C6";
public final static int M_DEFAULT = 2; // default value
...
}

使用方法changeParameters:

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和Excel列。有没有人知道我怎么能看到Strings sheetName和excelCell不被视为String而是作为对来自Datasource的String的引用(例如,访问“C6”而不是“Datasource.M_LOC”?

2 个答案:

答案 0 :(得分: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放在DataSource中,字段名称为key,字段值为value。

我认为getFieldgetDeclaredField是线性时间方法,因此如果可能,您应该缓存其结果。

答案 1 :(得分:2)

如果您要按字符串引用事物,为什么要将它们存储为单个变量?为什么不使用Map<String, String>?这样,当您需要访问"Datasource.M_LOC"引用的字符串时,您可以使用

Map<String,String> referenceMap;
...
referenceMap.get(parameter+"_LOC");