我目前正在编写这个函数:
public WebElementList findWebElementList(final By by){
return new WebElementList((List<WebElement>) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class<?>[] { List.class }, new InvocationHandler() {
// Lazy initialized instance of WebElement
private List<WebElement> webElements;
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (webElements == null) {
webElements = findElements(by);
}
return method.invoke(webElements, args);
}
}), driver);
}
它正在抛出从对象到列表的未经检查的转换。我在 WebElement 周围使用了代理,但它没有......所以我相信这是由于 List 是泛型类引起的。
有没有办法让我在列表周围拥有代理,并且不会收到未经检查的强制转换警告?
最佳答案
方法Proxy.newProxyInstance
返回 Object
。因为您知道这个对象将始终是 List<WebElement>
,你将它转换为这种类型。在这种情况下,Java 无法猜测这会正常,并会向您显示警告。如果不是这种情况,这可能会在运行时引发异常。
但是在这里,由于您知道在运行时不会抛出任何异常,因此您可以通过添加 @SuppressWarnings("unchecked")
来摆脱此警告。注释让 Java 知道您知道这种未经检查/不安全的转换。
你会做这样的事情:
public WebElementList findWebElementList(final By by){
@SuppressWarnings("unchecked")
return new WebElementList((List<WebElement>) Proxy.newProxyInstance(...
对此有一个很好的解释 @SuppressWarnings
from Jon Skeet .
关于java - 返回 List<WebElements> 周围的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274146/