在这个例子中:假设我需要一个selectionSort的版本,它可以使用调用方提供的外部可比性来处理任何类型T。
第一次尝试:
public static <T> void selectionSort(T[] arr, Comparator<T> myComparator){....}
假设我有:
现在,我有:
selectionSort(arr, myComparator);
public static <T> void selectionSort(T[] arr, Comparator<? super T> myComparator){....}
这个宣言会起作用,但我不完全确定我一直在做什么...我知道使用是要走的路。如果“超T”的意思是“T的未知超型”,那么我是强加了一个上界还是下界?为什么超级?我的意图是让T的任何子类使用myComparator,为什么“?超级T”。好困惑...如果你对此有任何见解,我将不胜感激。
前面谢谢!
首先,您可以通过使用vehicle[]
,然后将truck
s添加到其中来解决这个问题。
您需要<的原因?super T>
回到泛型规则,即comparator
不是comparator
的子类型;无界类型t
必须完全匹配,但它没有。
为了传入合适的比较器
,它必须是被比较的类的比较器
或它的任何超类,因为在OO语言中,任何类都可以被视为超类的实例。因此,比较器
的泛型类型是什么并不重要,只要它是数组组件类型的超类型。
问题内容: 我试图了解下限和上限通配符的行为。 尝试编译以下代码时遇到问题。 为了弄清楚问题,我还尝试了下限通配符。幸运的是或不幸的是,代码可以很好地编译,但是却造成了很多混乱。 有人可以解释一下这两个代码段如何工作。如果有人可以提供其他示例/链接,那就太好了。 如果我在上面做错了什么,请纠正我。 提前致谢。 问题答案: 表示“未知类型”。 表示某种对象的集合。此“某种类型”可以是作为其子类或自身
上限通配符下限通配符 有人能帮我理解一下吗?
null 为什么我不能在MyList中添加对象。因为如果我们使用super,这意味着这个列表可以包含在Java类的继承制度中等于或高于number的对象。因此应该按照该语句在列表中添加新的Object()。 多谢了。
问题内容: 我对Java中的通用通配符有两个疑问: 和之间有什么区别? 什么是有界通配符,什么是无界通配符? 问题答案: 在你的第一个问题中,并且是有界通配符的示例。无限制的通配符看起来像,基本上就是<? extends Object>。宽松地表示泛型可以是任何类型。有界通配符(或)通过说它必须扩展特定类型(称为上限)或必须是特定类型的祖先(称为下限)来对类型进行限制。
所以我在阅读泛型以重新熟悉这些概念,尤其是在涉及通配符的地方,因为我很少使用或遇到通配符。从我的阅读中,我不明白他们为什么使用通配符。下面是我经常遇到的一个例子。 你为什么不这样写: oracle网站上的另一个示例: 为什么这不是写成 我错过什么了吗?
问题内容: 我真的很难理解通配符参数。我对此有一些疑问。 作为类型参数只能在方法中使用。例如:我不能使用类型参数定义类。 我了解上限。 表示:“ 如果有实现该 接口的 对象, 则将打印。 ” 我对有点问题。表示:“ 如果具有 或扩展的任何类 (的后代 ), 则将打印。 ” 纠正我哪里出错了。 简而言之,只有或或或或可用作定义泛型类的类型参数。只能用于方法 更新1: 根据Ivor Horton的书,