这些通配符是多余的吗?
are these wildcards redundant?
我有两个使用通配符泛型的方法示例。
第一个例子:
public static <T extends Comparable> T findMax(List<T> list)
第二个例子:
public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)
我想知道这两个例子是否多余。如果是,为什么?
这两个例子告诉你不同的东西,所以它们不是多余的,它们给出了不同的信息,并以不同的方式限制了类型。
public static <T extends Comparable> T findMax(List<T> list)
在此示例中,您告诉 T
变量可以是实现或扩展 Comparable
的任何类型(如果它是 class 或接口)
public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)
在这个例子中,你告诉 T
类型应该扩展 comparable 并且还告诉类型必须是 T
的超级 class (在 comparable 内部)但是它可以是列表中 T
的子类型。
两个通配符都有所不同。
第一个说 T 或 T 的超类型必须实现 Comparable 接口。第二个说您可以使用 T 类型或 T 子类型的对象列表。
我有两个使用通配符泛型的方法示例。
第一个例子:
public static <T extends Comparable> T findMax(List<T> list)
第二个例子:
public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)
我想知道这两个例子是否多余。如果是,为什么?
这两个例子告诉你不同的东西,所以它们不是多余的,它们给出了不同的信息,并以不同的方式限制了类型。
public static <T extends Comparable> T findMax(List<T> list)
在此示例中,您告诉 T
变量可以是实现或扩展 Comparable
的任何类型(如果它是 class 或接口)
public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)
在这个例子中,你告诉 T
类型应该扩展 comparable 并且还告诉类型必须是 T
的超级 class (在 comparable 内部)但是它可以是列表中 T
的子类型。
两个通配符都有所不同。
第一个说 T 或 T 的超类型必须实现 Comparable 接口。第二个说您可以使用 T 类型或 T 子类型的对象列表。