Java &引用;“加载”;基于字符串名称初始化,并使用字符串名称访问字段值
我已经使用反射成功地从另一个类获得了列表字段的值。但是,如果字段的类型为List,则无法使用它 这是我的实际代码:Java &引用;“加载”;基于字符串名称初始化,并使用字符串名称访问字段值,java,selenium-webdriver,reflection,Java,Selenium Webdriver,Reflection,我已经使用反射成功地从另一个类获得了列表字段的值。但是,如果字段的类型为List,则无法使用它 这是我的实际代码: class PageModel { @FindAll({ @FindBy(xpath = "//select") }) public static List<WebElement> webelements; public static List<String> strings = Arrays.asList("One", "Two"
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
}
}
类页面模型{
@FindAll({@FindBy(xpath=“//选择”)})
公共静态列表webelements;
公共静态列表字符串=Arrays.asList(“一”、“二”、“三”);
}
课堂测试{
公共静态void main(字符串[]args){
Class model=Class.forName(“页面模型”);
//列表样本
obj=model.getField(“strings”).get(model);
List testStrings=(List)obj;
for(对象str:testStrings)
系统输出打印(str);
//列表样本
obj=model.getField(“webelements”).get(model);
列表测试元素=(列表)对象;
//无法将java.lang.reflect.Field转换为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
}
}
公共类MyGetter{
sourceClass;
公共MyGetter(字符串源名称){
sourceClass=Class.forName(sourceName);
}
公共列表getField(字符串字段名){
返回新的ArraysourceClass.getField(fieldName);
}
}
公共类源1{
公共静态列表字段1=新的ArrayList(){{
字段1.添加(“字段1VAL”);
}};
}
公共类源2{
公共静态列表字段2=新的ArrayList(){{
字段2.添加(“字段2VAL”);
}};
}
公开课考试{
公共void main(字符串[]参数){
MyGetter get1=新的MyGetter(“Source1”);
System.out.println(get1.field1);
//输出:field1Val
MyGetter get2=新的MyGetter(“Source2”);
System.out.println(get2.field2);
//输出:field2Val
}
}
但是java.lang.Class.getField(字符串名)方法不返回列表。