我对<t> vs <!-感到困惑扩展T->何时使用有界通配符?

时间:2018-11-25 11:10:43

标签: java generics wildcard

如果我有一个带有通用构造函数的基本类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?抱歉,如果以前已经问过这个问题,我似乎找不到可以使用它的示例。

0 个答案:

没有答案