有个类A
public class A<E> {//代码略
}再写一个Test类
public class Test {
public static void main(String[] args){
A<String> s1 = new A();
A<Object> s2 = new A(); s2.push("Java");
s2.push(2);
s1.push("Sun");
add(s1,s2);
} public static <T> void add(A<T> s1, A<T> s2) { while(! s1.isEmpty())
s2.push(s1.pop());
}}
add方法将s1的字符串添加到s2中,但是add(s1,s2)这行会编译错误而如果把形参A<T> s2 换成 A<? super T>则正确,书上解释说是s1的类型是A<String> 而s2类型为A<Object>。 <? super T>表示类型T 或者T的子类型。
为什么说A<Object>是A<? super String> 的子类型
public class A<E> {//代码略
}再写一个Test类
public class Test {
public static void main(String[] args){
A<String> s1 = new A();
A<Object> s2 = new A(); s2.push("Java");
s2.push(2);
s1.push("Sun");
add(s1,s2);
} public static <T> void add(A<T> s1, A<T> s2) { while(! s1.isEmpty())
s2.push(s1.pop());
}}
add方法将s1的字符串添加到s2中,但是add(s1,s2)这行会编译错误而如果把形参A<T> s2 换成 A<? super T>则正确,书上解释说是s1的类型是A<String> 而s2类型为A<Object>。 <? super T>表示类型T 或者T的子类型。
为什么说A<Object>是A<? super String> 的子类型
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货