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

オブジェクトからリストへのチェックされていないキャストをスローしています。私はWebElementの周りにプロキシを使用しましたが、そうではありません.Listがジェネリッククラスであることが原因だと思います。

リストの周りにプロキシを配置し、チェックされていないキャスト警告を受け取らないようにする方法はありますか?

4

1 に答える 1

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これについては、Jon Skeetによる適切な説明があります。

于 2013-08-16T13:53:24.117 に答える