Java 中的泛型提供了靈活性和安全性,但也有一些重要的限制。這些涉及類型參數、靜態成員、泛型陣列和泛型異常的實例化。
1。類型參數的實例化
無效範例:
class Gen<T> { T ob; Gen() { ob = new T(); // Inválido! } }
2。靜態成員的限制
靜態成員不能使用外部類別的泛型類型參數。
無效範例:
class Wrong<T> { static T ob; // Inválido! static T getob() { // Inválido! return ob; } }
原因:靜態上下文在類別的所有實例之間共享,而泛型參數可能因實例而異。
解法: 宣告定義自己型別參數的靜態方法:
static <U> U genericMethod(U value) { return value; }
3。通用數組
數組和泛型的約束:
T vals[]; // Válido como referência vals = new T[10]; // Inválido!
Gen<Integer> gens[] = new Gen<Integer>[10]; // Inválido!
原因:在執行過程中,擦除會消除類型訊息,因此無法建立安全數組。
解決方法:
使用現有陣列:
vals = nums; // Atribuir array existente é válido.
Gen<?> gens[] = new Gen<?>[10]; // Correto.
4。通用異常
泛型類別不能擴充 Throwable。
無效範例:
class GenException<T> extends Exception { // Inválido! T value; }
原因:這可能會損害運作時的異常處理機制。
解決方案: 使用普通泛型類別封裝訊息,然後與標準異常整合。
5。限制摘要
型別參數的實例化:不能直接實例化,但可以使用現有實例。
靜態成員:不能使用外部類別的泛型類型,但靜態方法可以定義自己的泛型參數。
泛型陣列:不能直接實例化,但允許使用萬用字元進行泛型參考。
通用異常:無法創建,但可以使用普通類別進行模擬。
理解這些限制對於在 Java 中設計安全且有效率的泛型類別至關重要。
以上是使用仿製藥的限制的詳細內容。更多資訊請關注PHP中文網其他相關文章!