2

クラスのデータソースからパラメーターを読み取りたい:

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 はどちらも、パラメータとして文字列を取り、Excelrow と Excelcolumn を取得します。Strings sheetName と excelCell が String としてではなく、Datasource からの String への参照として表示されるようにする方法を知っている人はいますか?

4

2 に答える 2

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

または、フィールド名をキー、フィールド値を値として DataSource にハッシュマップを配置します。

getFieldとは線形時間メソッドであると考えているgetDeclaredFieldため、可能であれば、その結果をキャッシュする必要があります。

于 2013-04-15T21:08:03.953 に答える
2

文字列で物事を参照するつもりなら、なぜそれらを個々の変数として保存するのですか? なぜ使用しないのMap<String, String>ですか?そうすれば、 によって参照される文字列にアクセスする必要がある場合"Datasource.M_LOC"、次を使用できます。

Map<String,String> referenceMap;
...
referenceMap.get(parameter+"_LOC");
于 2013-04-15T21:09:02.343 に答える