java - "Load"基于字符串名称的类,并使用字符串名称访问字段值

标签 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", "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/

相关文章:

java - 使用 Selenium java 长时间运行 webdriver 时内存增加

c# - 使用同一个程序集多次调用 Assembly.Load(AssemblyName) 有什么缺点?

c# - 有没有办法声明以任何 lambda 作为参数的方法?

java - 将 bitmab 从 Activity 传递回 Fragment

java - 如何通过循环小时来返回时间对象列表

java - Activity 没有音调检测 TarsosDSP 没有重新启动

php - 如何获取 PHP 类中所有函数的数组?

java - 插入子表时外键显示为空,错误无法将值 NULL 插入列中

java - 从容器中获取文本

selenium - 如何使用 webdriver 在 IE 中单击选择选项?