黑马程序员技术交流社区

标题: 关于Java泛型中的一个问题? [打印本页]

作者: 党传才    时间: 2012-3-27 11:18
标题: 关于Java泛型中的一个问题?
各位大师帮忙解决下面代码中提问的问题,小菜我将感激不尽!

import java.util.*;
public class Student  {
  
void func(List<? extends String> list){
list.add("huajielobn");        //为什么会报错?
list=new ArrayList<String>();  //为什么不报错?
list=new ArrayList<Object>(); //为什么会报错?
Object o=list;                //为什么不报错?
   
  }
     
}
作者: 田啸    时间: 2012-3-27 12:36
本帖最后由 田啸 于 2012-3-27 12:38 编辑

1. String类不能被继承,因为它是final的。 看下API中的定义:public final class String
2. List<? extends B> list ,这种用法中 ,list只能接收B类或者B类的子类:因此
  list=new ArrayList<String>();  不会报错
  list=new ArrayList<Object>(); //Object是 String的父类 所以会报错
3 Object o = list; 这里是向上转型, Object是所有类的父类,所以不会报错
                                                                                                        
作者: 李井山    时间: 2012-3-27 12:48
<? extends String>说明list的泛型是String或其子类,String 是final的,无子类,所以只能是String
任何对象都可当作Object




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