我已经使用反射成功从另一个类获取了 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。
提前非常感谢您。
最佳答案
您可以通过将类名设置为静态来获取列表。
在这里,我修改了您的代码。
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
}
}
关于java - "Load"基于字符串名称的类,并使用字符串名称访问字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46482587/