0

我目前正在编写这个函数:

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);
}

它正在从 Object 向 List 抛出未经检查的强制转换。我在 WebElement 周围使用了一个代理,但它没有......所以我相信这是由于 List 是一个泛型类引起的。

有什么办法可以让我在列表周围有一个代理,而不是得到那个未经检查的演员警告?

4

1 回答 1

1

该方法Proxy.newProxyInstance返回一个Object. 由于您知道此对象将始终为 a List<WebElement>,因此您将其强制转换为这种类型。在这种情况下,Java 无法猜测这会正常并显示警告。如果不是这种情况,这可能会在运行时引发异常。

但是在这里,由于您知道在运行时不会抛出任何异常,您可以通过添加@SuppressWarnings("unchecked")注释让 Java 知道您知道这种未经检查/不安全的强制转换,从而消除此警告。

你会做这样的事情:

public WebElementList findWebElementList(final By by){
   @SuppressWarnings("unchecked")
   return new WebElementList((List<WebElement>) Proxy.newProxyInstance(...

@SuppressWarningsJon Skeet对此有很好的解释。

于 2013-08-16T13:53:24.117 回答