- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我在阅读泛型方法时感到很困惑。先说一下这里的问题:
在这个例子中:假设我需要一个适用于任何类型 T 的 selectionSort 版本,方法是使用调用者提供的外部可比较对象。
第一次尝试:
public static void selectionSort(T[] arr, Comparator myComparator){....}
假设我有:
现在,我做:
selectionSort(arr, myComparator);
它不会工作,因为 myComparator 不适用于 Vehicle 的任何子类。
然后,我这样做:
public static void selectionSort(T[] arr, Comparator super T> myComparator){....}
这个声明会起作用,但我不完全确定我一直在做什么......我知道使用是要走的路。如果“?super T”表示“T 的未知父类(super class)型”,那么我是在施加上限还是下限?为什么 super 棒?我的意图是让 T 的任何子类都可以使用 myComparator,为什么是“?super T”。很困惑...如果您对此有任何见解,我将不胜感激..
Cảm ơn trước nhé!
1 Câu trả lời
首先,您可以通过 Vehicle[]
来解决它然后你添加了 Truck
你需要的原因 super T>
回到 Comparator
的泛型规则不是 Comparator
的子类型;无界类型 T
必须完全匹配,但事实并非如此。
为了一个合适的Comparator
要传入,它必须是 Comparator
被比较的类或其任何父类(super class),因为在 OO 语言中,任何类都可以被视为父类(super class)的实例。因此,Comparator
的泛型类型是什么并不重要。是,只要它是数组组件类型的父类(super class)型即可。
关于java - Java 中的通配符 Generic 和 super T> 意思,下界或上界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497849/
Tôi là một lập trình viên xuất sắc, rất giỏi!