-
泛型只在編譯期間有效,並且在編譯期間會驗證傳入的值是否爲泛型類型的值,如果不是對應泛型的值,將會報錯:
圖1
圖2
此時的構造函數的值應該是泛型的類型的值,也就是String類型的值,否則會報錯。
2.如下圖說明了,泛型在編譯成class文件會被擦除,也就是運行的是同一個Class文件,此處和JVM的類加載相關。不贅述
圖3
3.如果沒有傳入對應的泛型,則是Object類型,因爲Object能兼容所有類型,所以可以傳入任何參數,如下圖
圖4
4.當接口有泛型時
如果其子類沒有泛型,實現的接口也不能用泛型,此時默認是Object類型
還有一種情況是子類有泛型,而父類沒有泛型,此時實現的接口還是Object類型
最後一種情況是,子類有指定泛型,父類也有指定泛型
那麼對應的方法就是T類型,實現父類的方法。
還有一種情況:
直接在實現父類的方法指定其泛型,如果實現方法有用到父類的泛型,那麼就使用指定的泛型
總結第4點:當父類沒有泛型的時候,默認繼承IGeneric類,父類的泛型默認變成Object,所以不管子類是否有泛型,實現的方法如果帶有父類的泛型都是Object