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
AList
本身就是一种对象类型,就像List
一样,List
不扩展ListAList
本身就是一种对象类型,而列表
并没有扩展列表
,这是因为列表
既不是列表
的子类型,也不是超类型。有关更多信息,您可以阅读Joshua Bloch的有效Java中的Item25。我在复制和粘贴他的书
数组在两个重要方面不同于泛型类型。首先,数组是协变的。
这个听起来很吓人的词的意思很简单,如果Sub是Super的一个子类型,那么
数组类型Sub[]是Super[]的子类型。相比之下,泛型是不变的:例如
任何两种不同的类型Type1和Type2,List既不是子类型也不是
表的超类型
这是因为List
既不是List
的子类型,也不是超类型。有关更多信息,您可以阅读Joshua Bloch的有效Java中的Item25。我在复制和粘贴他的书
数组在两个重要方面不同于泛型类型。首先,数组是协变的。
这个听起来很吓人的词的意思很简单,如果Sub是Super的一个子类型,那么
数组类型Sub[]是Super[]的子类型。相比之下,泛型是不变的:例如
任何两种不同的类型Type1和Type2,List既不是子类型也不是
表的超类型
在使用泛型时使用通配符可能会有所帮助
像
名单
在使用泛型时使用通配符可能会有所帮助
像
名单