2014-10-06 52 views
0
失敗

我有以下接口:列表鑄造界面是用Java

public interface CustomWebElement extends WebElement 
. . . methods 

在下面的地方,當我嘗試投WebElementCustomWebElement一切都很好:

CustomWebElement a = (CustomWebElement) element.findElement(by); //findElement return WebElement 

但電話到findElements方法返回List<WebElement>鑄造失敗:

List<CustomWebElement> a = (List<CustomWebElement>) element.findElements(by); 

給我例外:

Inconvertable types; Cannot cast List<WebElement> to List<CustomWebElement> 

爲什麼List投在這種情況下失敗?

回答

1

一個List<WebElement>是在自己的權利的對象類型爲List<CustomWebElement>,並List<CustomWebElement>沒有延伸List<WebElement>

0

這是因爲List<WebElement>既不是亞型也不是超類型List<CustomWebElement>。有關更多信息,您可以閱讀Joshua Bloch的Effective Java中的Item25。我複製,並從他的書粘貼

陣列從泛型類型在兩個重要方面有所不同。首先,數組是協變的。 這個嚇人的單詞意味着如果Sub是Super的子類型,那麼 數組類型Sub []是Super []的子類型。泛型,相反,是不變的:對於 任意兩個不同類型的Type1和Type2,列表既不是一個亞型,也沒有列表的 超

0

使用通配符,而使用泛型可以幫助 像

列表< ?延伸WebElement>