gpt4 book ai didi

Java Generics - 在实现接口(interface)的类上指定上限,该接口(interface)本身指定上限

转载 作者:行者123 更新时间:2023-11-29 03:17:43 26 4
gpt4 key购买 nike

我有以下界面:

public interface ISort<T extends Comparable<T>> {
public void sort(T[] array);
}

我对此的理解是 <T extends Comparable<T>>告诉编译器在这个类中,可能有一些泛型类型 T , 它们必须是 Comparable<T>或者是任何实现 Comparable<T> 的类.

然后我有以下类(class):

public class Sort<T extends Comparable<T>> implements ISort<T> {

public void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}

public void sort(T[] array) {
java.util.Arrays.sort(array);
}

}

同样,我有 <T extends Comparable<T>>告诉编译器在这个类中我将使用类型 T它必须与 Comparable<T> 形成 IS-A 关系.但是,为什么我必须只输入 implements ISort<T> ,为什么我不需要写 implements ISort<T extends Comparable<T>> ?为了帮助我理解这一点,您能否解释一下这些泛型语句究竟向编译器推断了什么?

最佳答案

在类中指定 T 与在 extends 或 implements 子句中使用 T 是有区别的。

当用类指定 T 时,您是声明类型参数 T,但在 extends 或 implements 子句中,您是 < em>使用已声明的类型参数。

public class Sort<T extends Comparable<T>>  // Declare T to be Comparable<T>
implements ISort<T> // Use T

在 extends 或 implements 子句中使用类型参数与在类主体中使用类型参数没有什么不同。

关于Java Generics - 在实现接口(interface)的类上指定上限,该接口(interface)本身指定上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25516145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com