gpt4 book ai didi

java - 使用类来创建对象

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:27 25 4
gpt4 key购买 nike

我们有不久前的以下代码(这是 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数组将显示每个方法的类型。

例如说“method0”是整数。然后proxy[0]应该是Integer.class 。那么我该怎么说类似(proxy[0]'Class) x = method0();之类的话呢? ?

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

最佳答案

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

下面的方法采用类的 List 并为每个类调用 getPage,返回由 getPage 返回的对象的 List:

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数组而不是List,但这会在您每次调用它时给您一个通用数组警告。

如果您想为不同的类调用不同的方法,您可能需要创建一个选择 (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);

我并不经常使用如此复杂的泛型,因此我非常感谢有关此解决方案的任何反馈。

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

关于java - 使用类来创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com