泛型

来源:互联网 发布:帝国cms图片集分割 编辑:程序博客网 时间:2024/04/30 07:26


 

泛型 1.5版本特性

  优点:1、将运行时期的错误转移到了编译时期(有利于程序员第一时间发现)

        2、省去了强转的麻烦

        3、去除了黄色的提示

ArrayList  list = new ArrayList();

list.add("abc");

list.add(123);

list.add(newPerson("lisi",21));

 

Interator it =list.iterator();

while(it.hasNext()){

 Person p = (Person)it.next()          //会报类型转换错误

 System.out.println(p.getName());

}

 

泛型注意:

 

     1、泛型的前面和后面的数据类型必须一致

     2、后面的数据类型可以不写,如果不写,叫做菱形泛型(1,7版特性)

     3、如果泛型定义成Object(可以但)是没有意义的,所有类型都可以是Object

     4、集合的泛型声明成一种引用数据类型,这个集合可以存储这种类型对象

        和这种类型的子类型对象(比如 Person类型,person的子类Student

        是可以的)(泛型不能是基本数据类型)

 

LinkedList<String>list = new LinkedList<String>();

 

LinkedList<Person>list = new LinkedList<>();  //第二个泛型可以不写

 

list.add( newStudent("张三",23));     // Student类继承了Person (父类引用指

                                 // 向子类对象)

 

public <T>void print(T  t){   //可以写但没意义不如写成Object

 

}

public voidprint(Object obj){

 

}

 

public static voidmethod(Q  q){   //报错静态随着类的加载而加载,没创建对

                              //象但Q需要对象才能识别,所以会报错

                              //

 System.out.println(q);

}

 

高级泛型

<?>  // ?泛型的通配符当不确定后面的数据类型时,可以将前面的泛型定义成?

List<String>  l1 =new linkedList<>()

 

? extends E 固定上边界

 

ArrayList<Person>list  = new ArrayList<>();

list1.add(newPersong("张三"23));

list1.add(newPersong("张三1"24));

 

ArrayList<Student>list1 = new ArrayList<>();

list2.add(newPersong("张三2"25));

list2.add(newPersong("张三3"28));

 

list1.addAll(list2);  // 对的父类引用指向子类对象

list2.addAll(list1);   //错的,子类引用不能指向父类对象

 

 

 

静态方法不能用泛型

 

 

 


 

0 0
原创粉丝点击