如果我有一个带有通用构造函数的基本类Pair,则
private T first;
private S second;
public Pair(Pair<T, S> p) {
this(p.first, p.second);
}
像这样,这和这有什么区别?
private T first;
private S second;
public Pair(Pair<? extends T, ? extends S> p) {
this(p.first, p.second);
}
我知道第二个示例是一个上限通配符,这意味着Type可以是T或T的任何子类,但是如果我做类似的事情:
Pair<Animal, Animal> animalPair = new Pair<>(new Cat("Tiddles"), new Dog("Rover"));
或:
Pair<Number, Number> numberPair = new Pair<>(2.97, 7545498865L);
那么这些参数无论如何都是T和S的子类,因此无论是否带有?,编译器都不会抱怨。延伸部分。
您何时使用?扩展T而不只是T?抱歉,如果以前已经问过这个问题,我似乎找不到可以使用它的示例。