您好,登錄后才能下訂單哦!
在Java中,泛型提供了類型安全的方式來創建可重用的類和方法。泛型支持協變和逆變,這有助于更好地理解和使用泛型類型。
協變是指子類型可以替換其父類型的情況。在Java中,泛型類型支持協變,這意味著你可以將一個子類型的泛型參數替換為其父類型的泛型參數,而不會導致編譯錯誤。
例如,假設你有一個泛型接口Shape
:
public interface Shape<T> {
T getArea();
}
你可以創建一個繼承自Shape
接口的Circle
類:
public class Circle<T> implements Shape<T> {
private T area;
@Override
public T getArea() {
return area;
}
// ... 其他代碼
}
注意,Circle
類也使用了泛型參數T
。由于Java的泛型支持協變,你可以將Circle<Integer>
類型的對象賦值給Shape<?>
類型的變量:
Shape<?> shape = new Circle<>();
逆變是指父類型可以替換其子類型的情況。在Java中,泛型類型也支持逆變,但需要注意的是,逆變僅適用于泛型參數的限定類型(通常是? extends T
或? super T
)。
例如,假設你有一個泛型接口Drawable
:
public interface Drawable<T> {
void draw(T object);
}
你可以創建一個繼承自Drawable
接口的Shape
類:
public class Shape<T> implements Drawable<T> {
@Override
public void draw(T object) {
// ... 繪制邏輯
}
// ... 其他代碼
}
由于Java的泛型支持逆變,你可以將Drawable<Shape>
類型的對象賦值給Drawable<? super Shape>
類型的變量:
Drawable<?> drawable = new Shape<>();
drawable.draw(new Shape<>());
? extends T
或? super T
)。免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。