如何正確使用Java泛型extends

小樊
81
2024-09-29 22:49:15

在Java中,extends關(guān)鍵字用于限制泛型參數(shù)的類(lèi)型范圍。它有兩個(gè)主要用途:

  1. 限制泛型參數(shù)必須是某個(gè)類(lèi)的子類(lèi)或?qū)崿F(xiàn)某個(gè)接口。
  2. 限制泛型參數(shù)必須是某個(gè)類(lèi)的子類(lèi)或?qū)崿F(xiàn)某個(gè)接口,同時(shí)還可以指定上界,即泛型參數(shù)必須是某個(gè)類(lèi)的子類(lèi)、實(shí)現(xiàn)某個(gè)接口或者是這個(gè)類(lèi)的子類(lèi)與另一個(gè)類(lèi)的交集。

下面是使用extends關(guān)鍵字的示例:

示例1:限制泛型參數(shù)必須是某個(gè)類(lèi)的子類(lèi)

public class GenericBox<T extends Number> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

在這個(gè)例子中,GenericBox類(lèi)是一個(gè)泛型類(lèi),它的泛型參數(shù)T必須是Number類(lèi)的子類(lèi)。這意味著你可以創(chuàng)建一個(gè)GenericBox對(duì)象來(lái)存儲(chǔ)任何Number類(lèi)型的值,如Integer、Double等,但不能創(chuàng)建一個(gè)GenericBox對(duì)象來(lái)存儲(chǔ)非Number類(lèi)型的值。

示例2:限制泛型參數(shù)必須是某個(gè)類(lèi)的子類(lèi),并指定上界

public class UpperBoundedGenericBox<T extends Number & Comparable<T>> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    public int compareTo(UpperBoundedGenericBox<T> other) {
        return this.value.compareTo(other.value);
    }
}

在這個(gè)例子中,UpperBoundedGenericBox類(lèi)是一個(gè)泛型類(lèi),它的泛型參數(shù)T必須是Number類(lèi)的子類(lèi)并且實(shí)現(xiàn)了Comparable<T>接口。這意味著你可以創(chuàng)建一個(gè)UpperBoundedGenericBox對(duì)象來(lái)存儲(chǔ)任何Number類(lèi)型的值,并且可以使用compareTo方法來(lái)比較兩個(gè)UpperBoundedGenericBox對(duì)象中的值。

0