Java中的列表转换接口失败

Java中的列表转换接口失败,java,Java,我有以下接口: public interface CustomWebElement extends WebElement . . . methods 在以下位置,当我尝试将WebElement转换为CustomWebElement时,一切正常: CustomWebElement a = (CustomWebElement) element.findElement(by); //findElement return WebElement 但是对返回Listcasting的findElement

我有以下接口:

public interface CustomWebElement extends WebElement
. . . methods
在以下位置,当我尝试将
WebElement
转换为
CustomWebElement
时,一切正常:

CustomWebElement a = (CustomWebElement) element.findElement(by); //findElement return WebElement
但是对返回
List
casting的
findElements
方法的调用失败:

List<CustomWebElement> a = (List<CustomWebElement>) element.findElements(by);
List a=(List)element.findElements(by);
给我一个例外:

Inconvertable types; Cannot cast List<WebElement> to List<CustomWebElement>
不可逆类型;无法将列表强制转换为列表
为什么
List
cast在这种情况下会失败?

请查看

CustomWebElement扩展WebElement
并不意味着
List扩展List

请查看

CustomWebElement extends WebElement
并不意味着
List extends List
A
List
本身就是一种对象类型,就像
List
一样,
List
不扩展
List

A
List
本身就是一种对象类型,而
列表
并没有扩展
列表
,这是因为
列表
既不是
列表
的子类型,也不是超类型。有关更多信息,您可以阅读Joshua Bloch的有效Java中的Item25。我在复制和粘贴他的书

数组在两个重要方面不同于泛型类型。首先,数组是协变的。 这个听起来很吓人的词的意思很简单,如果Sub是Super的一个子类型,那么 数组类型Sub[]是Super[]的子类型。相比之下,泛型是不变的:例如 任何两种不同的类型Type1和Type2,List既不是子类型也不是 表的超类型

这是因为
List
既不是
List
的子类型,也不是超类型。有关更多信息,您可以阅读Joshua Bloch的有效Java中的Item25。我在复制和粘贴他的书

数组在两个重要方面不同于泛型类型。首先,数组是协变的。 这个听起来很吓人的词的意思很简单,如果Sub是Super的一个子类型,那么 数组类型Sub[]是Super[]的子类型。相比之下,泛型是不变的:例如 任何两种不同的类型Type1和Type2,List既不是子类型也不是 表的超类型


在使用泛型时使用通配符可能会有所帮助 像

名单


在使用泛型时使用通配符可能会有所帮助 像

名单