簡體   English   中英

為什么java集合中的泛型如此奇怪?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM