Возврат прокси вокруг List<WebElements>
В настоящее время я пишу эту функцию:
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 является универсальным классом.
Есть ли способ для меня иметь прокси вокруг Списка, и не получать это непроверенное предупреждение о касте?
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
от Джона Скита.