下面两个声明有什么区别吗?
public<C extends Condition<E>> List<E> search (C condition)
public List<E> search (Condition<E> condition)
一个区别是显而易见的:在第一种情况下,C
可以在search
的主体中使用。但假设 search
正文中不会使用 C
:还有什么区别吗?
最佳答案
不,没有什么有用的区别。区别可以简化如下。
<T> void m(T object)
void m(Object object)
尽管第一个可以调用 this.<String>m(42)
它不会编译 - 但这没有任何值(value)。
当存在由其类型参数表达的某种关系时,泛型方法的值就出现了,例如:
<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);
关于java - Java 中的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934304/