是的,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