1

以下两个声明之间有什么区别吗?

public<C extends Condition<E>> List<E> search (C condition)

public List<E> search (Condition<E> condition)

一个区别是显而易见的:在第一种情况下C可以在search. 但是假设C不会在search: 正文中使用,还有什么区别吗?

4

1 回答 1

1

不,没有有用的区别。区别可以简化为以下。

<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);
于 2013-11-12T16:47:38.273 回答