我说一堂课,说测试;其中有一个嵌套的静态类,例如TestParams。

TestParams仅包含一些引用Test类的String变量

我面临的问题是,在Test类的设置器中,我需要验证set参数是否为Params类中声明的参数之一。

该方案显示在下面的代码中:

public class Test {

  protected String n;
  protected int num;

  public static class TestParams {
    public static final String PARAM_N="n";
    public static final String PARAM_NUM="num";
  }

  public void setParam(String key, Object value) {
    // Need to check here the if key is defined in TestParams
    // keep adding conditions to IF statement when more params added??
    if(key.equals(TestParams.PARAM_N) || (key.equals(TestParams.PARAM_NUM))
      // Do some stuff
  }

}


有什么方法可以用多个条件替换IF语句? (例如,是否在TestParams()中输入了密钥,或者对于代码结构而言是否有其他设计?

最佳答案

为了解决您要询问的特定问题,除了使用反射,我没有其他方法:

private boolean isValidKey(String str) {
    for (Field f : TestParams.class.getFields())
        try {
            if (f.get(null).equals(str))
                return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
    return false;
}


尽管我强烈建议您重新考虑设计。

08-04 16:30