2014-10-06 50 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>