Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;“加载”;基于字符串名称初始化,并使用字符串名称访问字段值_Java_Selenium Webdriver_Reflection - Fatal编程技术网

Java &引用;“加载”;基于字符串名称初始化,并使用字符串名称访问字段值

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"

我已经使用反射成功地从另一个类获得了列表字段的值。但是,如果字段的类型为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
    }
}
类页面模型{
@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(字符串名)方法不返回列表。