我们之前有以下代码(这是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
,因为我将调用一种方法。
答案 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);
我经常使用具有如此复杂性的泛型,所以我很感激有关此解决方案的任何反馈。
我不确定这是否是您正在寻找的解决方案。即使是这样,我建议您仔细检查当前的结构,看看是否有更简洁的方法来处理页面历史记录/面包屑。