簡體   English   中英

Java中的子類型化還是泛型?

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

上面的定義說RowsArrayList<List<Thing>>子類 (這意味着它是一個專門的版本), 而不是 RowsArrayList<List<Thing>>

這意味着RowsArrayList<List<Thing>> (因此,向上轉換有效),但是ArrayList<List<Thing>>並不一定是Rows (因此,向下轉換不起作用)。

如果您有一個已創建為new ArrayList<List<Thing>> ,則這是它的類型,您不能進一步對其進行向下轉換。 如果您希望能夠將其用作Rows ,則只需將其創建為new Rows

(順便說一下,對於類名,復數是非常規的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM