A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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:}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

11 个回复

倒序浏览
我先回一个吻么 {:soso_e122:}
回复 使用道具 举报
即使你将其设置为null了,它的类型还是没变啊,还是制定的Object的类型,那么你左右两边的类型不一致,当然会报错了。
注意:在使用泛型的时候,左右两边的类型必须保持一致,或者可一边缺省制定类型。
回复 使用道具 举报
这个跟http://bbs.itheima.com/forum.php ... mp;page=1#pid319415 , 基本上是一样的,沙发上的答案你可以参考下。
在泛型定义了T 的类型后,初始化的对象必须也是T 定义的类型(也就是LZ代码中定义了Object,接收的就必须是Object)。
如果要像多态一样有扩展性,就要用 ? extends Object ,那么就可以接收String类型。
回复 使用道具 举报
多态中这是可以的,object可以接受任意类型的对象,但是在泛型中不可以这样做,泛型类型必须匹配才能传递。
回复 使用道具 举报
你的意思是多态可以互相转换吗?  泛型和多态不一样  <>中是什么类型那么就是什么类型 不能相互转换
如果需要转换可以加泛型限定  ?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>
}

}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
Jacky_Chen1990 发表于 2013-5-10 22:05
我先回一个吻么

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

斑竹几期的呦???
回复 使用道具 举报
zms2100 发表于 2013-5-10 22:18
这个跟http://bbs.itheima.com/forum.php?mod=viewthread&tid=49252&page=1#pid319415 , 基本上是一样的, ...

嗯嗯,说的好,多谢!!
回复 使用道具 举报
张迁 发表于 2013-5-10 22:22
多态中这是可以的,object可以接受任意类型的对象,但是在泛型中不可以这样做,泛型类型必须匹配才能传递。 ...

Soga{:soso_e152:}
回复 使用道具 举报
刘学明    发表于 2013-5-10 22:23
你的意思是多态可以互相转换吗?  泛型和多态不一样  中是什么类型那么就是什么类型 不能相互转换
如果需 ...

多谢多谢!
回复 使用道具 举报
java冬冬 发表于 2013-5-11 12:58
斑竹几期的呦???

我是报的20期。额,看到你的头像我就想笑
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马