是的,K
和V
這裏是通用的type parameters。更具體地說,@aruisdante在評論中指出,它們是有界的類型參數,因爲它們指定了參數化類型必須滿足的界限 - 即它們都必須實現Comparable。
看來你的問題是關於一般的參數,但不是專門針對有界參數。你絕對應該做一些閱讀你自己,因爲你問a big (and important) topic,但我會在介紹它採取了刺:
您可能熟悉不同的上下文中看到類型參數 - Map<String, Integer>
:這裏<String, Integer>
也是類型參數,它們指定該映射中的鍵是String
s,其中的值是Integer
s。在方法聲明的上下文中,類型參數指定返回類型是什麼。這意味着你可以寫generic methods每一個他們所謂的時間返回不同的類型,這取決於你在什麼傳:
注意,K
和V
是兩個方法本身和傳入的參數類型參數:這告訴Java通過查看傳入的映射的鍵和值類型來確定K
和V
,並返回具有相同類型的映射。如果您致電sortByValue(fooMap)
而fooMap
是Map<String, FooType>
,則它將返回一個地圖<String, FooType>
,並且如果fooMap
是Map<Integer, BarType>
,則會返回Map<Integer, BarType>
。
更清晰的例子,考慮:
public <T> foobar(T t) { }
這裏的類型參數是無限的 - 這意味着T
可以是任何類,所以你可以作爲參數傳遞任何類的對象,並得到一個對象返回相同的類型。或
public<T> convertTo(Object o, Class<T> clazz) { }
在這裏,你可以通過任何類作爲第一個參數的對象,並作爲第二個參數Class
對象,決定了T
會。所以你可以這樣做:
Fooclass s = convertTo(someObject, Fooclass.class)
其中,你可能會想象,可以是一個非常有用的模式。
它們是['界類型parameters'](http://docs.oracle.com/javase/tutorial/java/generics /bounded.html)。 – 2014-10-09 03:34:41
和一般[Java泛型教程](http://docs.oracle.com/javase/tutorial/java/generics/why.html) – aruisdante 2014-10-09 03:35:21
@ PM77-1泛型之外是否使用了有界類型參數? – user2859406 2014-10-09 03:37:46