黑马程序员技术交流社区
标题:
关于泛型通配符?扩展的一些问题
[打印本页]
作者:
wssjdysf
时间:
2013-11-19 02:54
标题:
关于泛型通配符?扩展的一些问题
Vector<? extends Number> a = new Vector<Integer>();
a.add(new Integer(23));//为什么这个报错,我想往a里面添加一个东西怎么做
a.add(new Double(11.1));//这个也报错,不是说可以装Number的子类吗?
Vector<? super Number> a2 = new Vector<Object>();
a2.add(new Integer(23));//为什么这样写还对了(Integer是Number的子类)
a2.add(new Double(11.1));//(Double是Number的子类)
// Vector<? extends Number> b = new Vector<String>();
Vector<? super Integer> c = new Vector<Number>();
c.add(23);
c.add(new Long(123l));//Long是Number的子类,怎么又错啊
问题多,还有点乱。。。我现在头也乱了
作者:
陈文杰
时间:
2013-11-19 04:18
class Text3{
public static void main(String[] args){
demo<String> d = new demo<String>();
d.setName("a");
System.out.println(d.getName());
//demo<?> d1 表示它可接收demo类中泛型类型为任意引用类型的demo对象的引用。
//此处它的用法类似于多态
demo<?> d1 = d;
//这里可以取值,是因为该方法是与泛型类型参数无关的方法(该方法不用接收泛型类型参数)。
//也就是说:你上面因事先就声明了它里面的类型,里面声明的什么类型,
//我调用该方法时就返回什么类型就行了。
System.out.println(d1.getName());
//这里不能赋值是因为,d1中的泛型类型为不具体类型,
//也就是说,连它自己都不知道它中的泛型类型是什么
//具体类型(它不知道自己是什么类型的,并不表示你就可以像其中放任何引用类型),
//你怎么能给它赋String类型的呢?
d1.setName("sss");
}
}
class demo<T>{
private T name;
public T getName()
{
return name;
}
public void setName(T name)
{
this.name = name;
}
}
作者:
黄炳期
时间:
2013-11-19 12:42
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2