2013-08-16 50 views
0

我目前正在寫這樣的功能:返回的代理列表周圍<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); 
} 

它扔從對象未經檢查的強制轉換成List。我在WebElement周圍使用了一個代理,並且它不......所以我認爲這是List成爲泛型類造成的。

有什麼辦法讓我有一個代理圍繞一個列表,而不是得到這個未經檢查的轉換警告?

+0

您能否給我們提供堆棧跟蹤並確切發生問題? – LaurentG

+0

沒有錯誤被拋出,只是一個警告。這是由我的演員列表造成的。代理以前曾與WebElement合作過,但我不知道如何使用通用類來完成此任務。 –

回答

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的一個很好的解釋。