#泛型介面(Generic Interface):
泛型介面允許我們定義一些通用的契約,並在實作時指定具體的型別:
java
interface Container {
void add(T item);
T get();
}
class Storage implements Container {
private T item;
@Override
public void add(T item) {
this.item = item;
}
@Override
public T get() {
return item;
}
}
public class Main {
public static void main(String[] args) {
Container stringStorage = new Storage<>();
stringStorage.add("Data");
System.out.println(stringStorage.get()); // 輸出: Data
}
}
在這個範例中,Container是一個泛型介面,Storage實作了這個介面,並在執行時指定具體型別。
#型別擦除(Type Erasure)機制
Java 的泛型在編譯期會進行型別檢查,以確保型別的安全性,但在運行期,Java 並不會保留具體的泛型型別資訊,這個過程稱為 型別擦除(Type Erasure)。
當 Java 編譯器編譯泛型程式碼時,它會將泛型型別替換為其上界(如果沒有明確指定,則替換為 Object),並插入適當的型別轉換操作。在運行期,所有的型別資訊都被擦除。這意味著在運行時,我們無法得知泛型的具體型別。
影響:
#總結
泛型通過引入型別參數,使程式碼在編譯期具有型別安全性,同時提高程式的靈活性和可重用性。由於 Java 的型別擦除機制,在運行期無法得知具體的泛型型別,這可能會帶來某些限制,不過泛型的型別安全性指的是「編譯期的檢查」,而不是「運行時的型別辨別」。因此,透過正確地使用泛型類、泛型方法和泛型介面,可以大大提升 Java 程式的結構與設計品質。