使用类来创建对象

时间:2016-12-09 13:57:30

标签: java class

我们之前有以下代码(这是Java):

protected <T> T click(String buttonDescription, WebElement button, Class<T> proxy) {
    click(buttonDescription, button);
    return getPage(proxy);
}

您可以使用click()之类的第三个参数调用AnyClass.class(可以是任何类)。 Class<T>代理将保留该类。

我想制作一个类似的方法,除了proxy将是一个类数组。 然后,新方法将调用一系列不同类型的方法,proxy数组将显示每种方法的类型。

例如说&#34; method0&#34;是整数。然后proxy[0]应为Integer.class。那我该怎么说(proxy[0]'Class) x = method0();

总结一下,我可以将一个类数组传递给一个方法,并且如何声明传入的每个类的对象?我不需要做new,因为我将调用一种方法。

1 个答案:

答案 0 :(得分:0)

我认真地认为应该有更好的方法来处理你的应用程序的面包屑,但要回答你的问题......

这是一个方法,它为每个类提取List个类并调用getPage,返回由List返回的getPage个对象:< / p>

protected <T> List<T> click(String buttonDescription, WebElement button, List<Class<? extends T>> proxies) {
    click(buttonDescription, button);
    List<T> retObjs = new ArrayList<>();
    for(Class<? extends T> proxy : proxies) {
        T obj = getPage(proxy);
        if(obj!=null)
            retObjs.add(obj);
    }
    return retObjs;
}

你也可以接受一个Class es而不是List的数组,但每次调用它时都会给你一个通用的数组警告。

如果要为不同的类调用不同的方法,可能需要创建一个select(if)链来确定要执行的操作:

if(Page.class.isAssignableFrom(proxy) { //true if proxy is Page or subclass of Page
    obj = getPage(proxy);
}
else if(Number.class.isAssignableFrom(proxy) {
    obj = doSomeMaths(proxy);
}

当您调用此方法时,返回类型T将由proxies的内部通用的上限确定:

List<Class<? extends Number>> list = new ArrayList<>();
...//Add stuff
List<Number> randoms = p.click(myString, myElement, list);

List<Class<? extends Page>> pages = new ArrayList<>();
...//Get the breadcrumbs
List<Page> crumbs = p.click(myString, myElement, pages);

我经常使用具有如此复杂性的泛型,所以我很感激有关此解决方案的任何反馈。

我不确定这是否是您正在寻找的解决方案。即使是这样,我建议您仔细检查当前的结构,看看是否有更简洁的方法来处理页面历史记录/面包屑。