我目前正在写这个函数:
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是一个泛型类。
我有没有办法在List周围设置代理,而不是获得未经检查的强制警告?
答案 0 :(得分:1)
方法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有一个很好的解释。