溫馨提示×

Java泛型extends與super的區別

小樊
112
2024-09-29 22:51:15
欄目: 編程語言

在Java中,泛型的extends和super關鍵字具有不同的作用和意義。

  1. extends:

extends關鍵字用于限制泛型參數的上界。它表示該泛型參數必須是給定類型或其子類型。這意味著,如果你有一個泛型類或方法,你可以使用extends來指定該泛型參數必須是某個類或接口的子類型。這有助于確保類型安全,并避免在運行時出現ClassCastException。

例如,假設你有一個泛型類Box,它可以容納任何類型的對象。但是,你希望確保Box只能容納那些實現了Comparable接口的對象。在這種情況下,你可以使用extends關鍵字來限制泛型參數T必須是Comparable或其子類型。

public class Box<T extends Comparable<T>> {
    private T item;

    public void set(T item) {
        this.item = item;
    }

    public T get() {
        return item;
    }

    public int compareTo(Box<T> other) {
        return item.compareTo(other.item);
    }
}
  1. super:

super關鍵字用于限制泛型參數的下界。它表示該泛型參數必須是給定類型或其父類型。這意味著,如果你有一個泛型類或方法,你可以使用super來指定該泛型參數必須是某個類或接口的父類型。這有助于確保類型安全,并避免在運行時出現ClassCastException。

然而,需要注意的是,Java泛型中的super關鍵字與類中的super關鍵字有所不同。在類中,super表示父類,用于調用父類的方法或訪問父類的成員變量。而在泛型中,super關鍵字用于限制泛型參數的下界,而不是表示父類。

例如,假設你有一個泛型方法,該方法接受一個列表作為參數,并返回該列表中的所有元素的總和。你可以使用super關鍵字來限制泛型參數List必須是Number或其子類型,以便在該方法中使用Number類的方法,如intValue()、doubleValue()等。

public static double sum(List<? super Number> list) {
    double sum = 0;
    for (Number n : list) {
        sum += n.doubleValue();
    }
    return sum;
}

在這個例子中,List<? super Number>表示一個列表,其元素類型可以是Number或其任何父類型(如Integer、Double等)。這使得該方法可以用于任何類型的Number列表,并確保類型安全。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女