在Java中,泛型extends
關鍵字主要有以下應用場景:
extends
關鍵字。這可以確保類型安全,并避免在運行時出現ClassCastException
。public class GenericBox<T extends Number> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
在這個例子中,GenericBox
類接受一個泛型參數T
,它必須是Number
類的子類。這樣,你可以創建一個GenericBox
對象來存儲任何類型的數字,但不能存儲非數字類型。
2. 限制泛型參數的上界:當你希望一個泛型參數不能是某個類的實例,但可以繼承自該類或其子類時,可以使用extends
關鍵字。這與super
關鍵字相對,后者用于限制下界。
public class UpperBoundedGeneric<T extends MyBaseClass> {
// ...
}
在這個例子中,UpperBoundedGeneric
類接受一個泛型參數T
,它必須是MyBaseClass
類的子類。
3. 實現多態性:通過使用extends
關鍵字,你可以編寫更加靈活和可重用的代碼。當你希望一個方法能夠處理多個類型時,這些類型都是某個基類的子類,你可以使用泛型方法來實現這一點。
public class MyClass<T extends MyBaseClass> {
public void doSomething(T item) {
// ...
}
}
在這個例子中,MyClass
類有一個泛型方法doSomething
,它接受一個類型為T
的參數,其中T
必須是MyBaseClass
類的子類。這樣,你可以創建一個MyClass
對象來處理任何類型的MyBaseClass
子類實例。
4. 與類型參數一起使用extends
:在某些情況下,你可能希望同時使用類型參數和extends
關鍵字來進一步限制泛型參數的類型范圍。
public class MyGenericClass<T extends Number & Comparable<T>> {
// ...
}
在這個例子中,MyGenericClass
類接受一個泛型參數T
,它必須是Number
類的子類并且實現了Comparable<T>
接口。這可以確保T
類型具有數字特性和可比較性。
總之,Java中的泛型extends
關鍵字允許你限制泛型參數的類型范圍,實現多態性,并編寫更加靈活和可重用的代碼。