[英]Subtyping or Generics in Java?
这是一个Java分配问题,可能涉及子类型和泛型。 我有一个扩展ArrayList
的类,称为Rows
public class Rows extends ArrayList<List<Thing>> implements List<List<Thing>>{}
我需要在另一个类中返回它,该类具有一个返回List<List<Thing>>
,因此我需要执行此操作以获得所需的返回类型:
private List<List<Thing>> list;
public List<List<Thing>> rows() {
Rows r = (Rows) list;// But this cast does not work at runtime
return (List<List<Thing>>) r;
}
Eclipse返回的错误是java.lang.ClassCastException: java.util.ArrayList
无法转换为package.Rows。 当我的Rows类扩展ArrayList
,我感到很困惑,我认为应该可以将其强制转换为它。
Rows extends ArrayList<List<Thing>>
上面的定义说Rows
是ArrayList<List<Thing>>
的子类 (这意味着它是一个专门的版本), 而不是 Rows
与ArrayList<List<Thing>>
。
这意味着Rows
是ArrayList<List<Thing>>
(因此,向上转换有效),但是ArrayList<List<Thing>>
并不一定是Rows
(因此,向下转换不起作用)。
如果您有一个已创建为new ArrayList<List<Thing>>
,则这是它的类型,您不能进一步对其进行向下转换。 如果您希望能够将其用作Rows
,则只需将其创建为new Rows
。
(顺便说一下,对于类名,复数是非常规的。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.