泛型討論 危害的解決

2021-08-30 20:47:11 字數 612 閱讀 6280

泛型的危害不是乙個語言特性,我們必須明確這一點,而在在執行時

例如在list這樣的型別在執行時都替換成list,而普通的型別變數在未指定邊界的情況下都將替換成object型別

替換的代價是顯而易見的,即在執行時不能顯示的引用執行的操作,例如轉型,instanceof和new表示式。因為所有關於引數型別的資訊都被丟失了。

當我們建立了footfoot  = new foot();看起來好像擁有了引數的型別,但事實並非如此,其實它只是乙個object型別而已。

例子:

public class ******holder

public object get()

public static void main(string args)

}public class ******holder

public t get()

public static void main(string args)

}

編譯它們產生位元組碼是相同的,

由於所產生的get()和set()的位元組碼是相同的,所以在泛型中的所有動作都發生在邊界處,對傳遞進來的值進行額外的編譯器檢測,並插入對傳遞出去的值的型別,所以:「邊界是發生動作的地方」

泛型討論 泛型介面

泛型也可以用於介面,例如生成器,這是一種專門負責創意物件的類。實際上是工廠方法設計模式的一種應用。不同的是它不需要任何引數。一般乙個生成器只定義乙個方法,該方法用於產生新的 物件。例子 public inte ce generator輔助類 public class coffee public cl...

泛型討論 泛型方法

泛型不經可以用在整個類上,同樣也可以用在雷中包含引數化的方法,而這個方法所在的類可以是泛型,也可以不是泛型,也就是說,是否擁有泛型方法,與其所在的類是否是泛型沒有關係。乙個基本的原則,優先使用泛型方法,然後才是泛型類,另外對於static方法而言,無法訪問泛型類的型別引數,所以,如果static方法...

泛型討論 堆疊類

使用泛型實現堆疊儲存機制 例子 public class stack nodenext boolean end private notetop new note public void push t item public t pop public static void main string a...