廖老师解释一下,super可以读是怎么回事
Topic sourceInteger first = (Integer) p.getFirst();
Integer last = (Integer) p.getLast();
因为你强制转型了,改成以下试试,就会提示:Type mismatch: cannot convert from capture#1-of ? super Integer to Integer
Integer first = p.getFirst();
Integer last = p.getLast();
这个正如楼上所说,进行了强制类型转换,而且可能是由上向下的转换,这种强制类型转换可以过的了编译,但是在运行的时候会出现错误。你的代码相当于你已经知道输入必是Integer类型(输入别的,运行肯定会报错),那么这里使用泛型感觉没什么意义了。廖老师所说的<? super T>不可读,个人感觉可能是指无法在运行时,得知返回对象的具体类型,这样便不能调用具体方法了。如果进行强转,可能会出错。
- 1
用户7395403409
public class Main {
public static void main(String[] args) {
Pair<Number> p = new Pair<>(123, 456);
int n = add(p);
System.out.println(n);
}
static int add(Pair<? super Integer> p) {
Integer first = (Integer)p.getFirst();
Integer last = (Integer) p.getLast();
return first.intValue() + last.intValue();
}
}
class Pair<T> {
private T first;
private T last;
public Pair(T first, T last) {
this.first = first;
this.last = last;
}
public T getFirst() {
return first;
}
public T getLast() {
return last;
}
}