[英]Why google-collections contains semantically equal functions and strange generics?
[英]Why does generics in java collections so strange?
例如,java.util.Collections中的check方法
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
為什么我可以這樣定義它:
public static <T> int binarySearch(List<T> list, T key, Comparator<T> c)
為什么這在java中不起作用?
您可以通過這種方式定義它,但是這樣就不會讓您使用Comparator<Shape>
搜索List<Circle>
。
基本上,這里表達的差異允許更大的靈活性,同時保持類型安全性。
為了放大Jon Skeet的答案,Java的泛型不像C ++模板。 對於JVM本身的向后兼容性而言,泛型的一些設計決策(如類型擦除)會導致語法笨拙和復雜的用例。 你可以在這里閱讀其中的一些內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.