我已经使用反射从另一个类成功获取了List字段的值。但是,如果字段是List类型,我就无法使用它。
这是我的实际代码:
class PageModel {
@FindAll({ @FindBy(xpath = "//select") })
public static List<WebElement> webelements;
public static List<String> strings = Arrays.asList("One", "Two", "Three");
}
class Test {
public static void main(String[] args) {
Class model = Class.forName("PageModel");
// List<String> sample
obj = model.getField("strings").get(model);
List<Object> testStrings = (List<Object>) obj;
for (Object str : testStrings)
System.out.print(str);
// List<WebElement> sample
obj = model.getField("webelements").get(model);
List<Object> testElements = (List<Object>) obj;
// java.lang.reflect.Field cannot be cast to java.util.List
}
}
即使我直接使用List testElements =(List)obj; ,同样的错误java.lang.reflect.Field无法强制转换为java.util.List。
提前非常感谢你。
答案 0 :(得分:0)
您可以使用classname将列表设为静态来获取列表。
在这里,我修改了你的代码。
public class MyGetter {
sourceClass;
public MyGetter(String sourceName) {
sourceClass = Class.forName(sourceName);
}
public List<String> getField(String fieldName) {
return new ArraysourceClass.getField(fieldName);
}
}
public class Source1 {
public static List<String> field1 = new ArrayList<String>(){{
field1.add("field1Val");
}};
}
public class Source2 {
public static List<String> field2 = new ArrayList<String>(){{
field2.add("field2Val");
}};
}
public class Test {
public void main(String[] args){
MyGetter get1 = new MyGetter("Source1");
System.out.println(get1.field1);
// output: field1Val
MyGetter get2 = new MyGetter("Source2");
System.out.println(get2.field2);
// output: field2Val
}
}