返回List <webelements> </webelements>周围的代理

时间:2013-08-16 13:11:45

标签: java generics selenium proxy-classes

我目前正在写这个函数:

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周围设置代理,而不是获得未经检查的强制警告?

1 个答案:

答案 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有一个很好的解释。