黑马程序员技术交流社区

标题: 泛型问题???????????????? [打印本页]

作者: java冬冬    时间: 2013-5-10 22:03
标题: 泛型问题????????????????
本帖最后由 java冬冬 于 2013-5-11 12:56 编辑
  1. class Info<T>{
  2. private T var ;
  3. public void setVar(T var){
  4. this.var = var ;
  5. }
  6. public T getVar(){
  7. return this.var ;
  8. }
  9. public String toString(){
  10. return this.var.toString() ;
  11. }
  12. }
  13. public class GenericsDemo{
  14. public static void main(String args[]){
  15. Info<String> i1 = new Info<String>() ;
  16. Info<Object> i2 = null ;
  17. i2 = i1 ; //两个Info对象进行转换,Info<String> ——> Info<Object>
  18. }
  19. }
复制代码
运行结果:


String是Object的子类,那么上面代码中为什么Info<String>无法转换为Info<Object>????????????
回答者送一吻{:soso_e152:}

作者: Jacky_Chen1990    时间: 2013-5-10 22:05
我先回一个吻么 {:soso_e122:}
作者: 黄玉昆    时间: 2013-5-10 22:13
即使你将其设置为null了,它的类型还是没变啊,还是制定的Object的类型,那么你左右两边的类型不一致,当然会报错了。
注意:在使用泛型的时候,左右两边的类型必须保持一致,或者可一边缺省制定类型。
作者: zms2100    时间: 2013-5-10 22:18
这个跟http://bbs.itheima.com/forum.php ... mp;page=1#pid319415 , 基本上是一样的,沙发上的答案你可以参考下。
在泛型定义了T 的类型后,初始化的对象必须也是T 定义的类型(也就是LZ代码中定义了Object,接收的就必须是Object)。
如果要像多态一样有扩展性,就要用 ? extends Object ,那么就可以接收String类型。
作者: 张迁    时间: 2013-5-10 22:22
多态中这是可以的,object可以接受任意类型的对象,但是在泛型中不可以这样做,泛型类型必须匹配才能传递。
作者: 刘学明       时间: 2013-5-10 22:23
你的意思是多态可以互相转换吗?  泛型和多态不一样  <>中是什么类型那么就是什么类型 不能相互转换
如果需要转换可以加泛型限定  ?extends Objectj     或 ? super String
class Info<T>{
private T var ;
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){
return this.var.toString() ;
}
}
public class GenericsDemo{
public static void main(String args[]){
Info<String> i1 = new Info<String>() ;
Info<Object> i2 = null ;  //  改成   Info<? extends Object> i2 = null l
i2 = i1 ; / /两个Info对象进行转换,Info<String> ——> Info<Object>
}

}
作者: java冬冬    时间: 2013-5-11 12:57
Jacky_Chen1990 发表于 2013-5-10 22:05
我先回一个吻么

我这是吻吗?我只是天生香肠嘴而已。哈哈哈{:soso_e106:}
作者: java冬冬    时间: 2013-5-11 12:58
黄玉昆 发表于 2013-5-10 22:13
即使你将其设置为null了,它的类型还是没变啊,还是制定的Object的类型,那么你左右两边的类型不一致,当然 ...

斑竹几期的呦???
作者: java冬冬    时间: 2013-5-11 12:59
zms2100 发表于 2013-5-10 22:18
这个跟http://bbs.itheima.com/forum.php?mod=viewthread&tid=49252&page=1#pid319415 , 基本上是一样的, ...

嗯嗯,说的好,多谢!!
作者: java冬冬    时间: 2013-5-11 13:00
张迁 发表于 2013-5-10 22:22
多态中这是可以的,object可以接受任意类型的对象,但是在泛型中不可以这样做,泛型类型必须匹配才能传递。 ...

Soga{:soso_e152:}
作者: java冬冬    时间: 2013-5-11 13:01
刘学明    发表于 2013-5-10 22:23
你的意思是多态可以互相转换吗?  泛型和多态不一样  中是什么类型那么就是什么类型 不能相互转换
如果需 ...

多谢多谢!
作者: 黄玉昆    时间: 2013-5-11 14:16
java冬冬 发表于 2013-5-11 12:58
斑竹几期的呦???

我是报的20期。额,看到你的头像我就想笑




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2