[英]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.