以下两个声明之间有什么区别吗?
public<C extends Condition<E>> List<E> search (C condition)
public List<E> search (Condition<E> condition)
一个区别是显而易见的:在第一种情况下C
可以在search
. 但是假设C
不会在search
: 正文中使用,还有什么区别吗?
不,没有有用的区别。区别可以简化为以下。
<T> void m(T object)
void m(Object object)
虽然第一个可以调用this.<String>m(42)
并且它不会编译 - 但没有任何价值。
泛型方法的价值来自于其类型参数表达的某种关系,例如:
<T> T giveItBackToMe(T object) {
return object;
}
...
String s = giveItBackToMe("asdf");
Integer i = giveItBackToMe(42);
或者:
<T> void listCopy(List<T> from, List<? super T> to) {
to.addAll(from);
}
...
List<Integer> ints = Arrays.asList(1, 2, 3);
List<Number> nums = new ArrayList<>();
listCopy(ints, nums);