标签:实现 cannot 多态 while 安全 元素 长度 new aaa
一、什么是泛型?
泛型是一种未知的数据类型,当我们不知道要使用什么数据类型的时候,可以使用泛型。
泛型也可以看成是一个变量,用来接收数据类型
E e:Element 元素
T t:type 类型
如:
1 public class ArrayList{
2 public boolean add{}
3 public E get(int num){}
4 }
ArrayList 集合在定义的时候,不知道集合中会存储什么类型的数据,所以类型使用了泛型,E 代表未知的数据类型
创建集合对象的时候,就会确定泛型的数据类型
ArrayList list=new ArrayList();
会把数据类型作为参数传递,把String 复制给泛型E
1 public class ArrayList{
2 public boolean add{}
3 public String get(int num){}
4 }
二、使用泛型的好处与弊端:
1.创建集合对象,不使用泛型时:
⑴好处:集合不使用泛型,也不指定数据类型时,默认的类型就是Object 类型,可以存储任意类型的数据
⑵弊端:不安全,会引发异常
如:
1 ArrayList list1=new ArrayList();
2 list1.add("aaa");
3 list1.add(11);
4 Iterator it=list1.iterator();
5 while(it.hasNext){ //这里使用了迭代器,下面会讲迭代器
6 Object obj=it.next();System.out.println(obj); //可以,下面就不可以了。
7
8 //想要使用String类特有的方法比如length获取字符串的长度,就不能使用多态 Object obj="abc";需要向下转型,否则运行会报错
9 Stirng str=(String)it.next();
10 System.out.println(str.length);
11 }
2.创建集合对象,使用泛型时:
⑴好处:①避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
②把运行期异常(代码运行期间才会抛出的异常),提升到了编译器(编译代码时就会报错)
⑵弊端:泛型是什么类型,就只能存储什么类型的数据。
如:
1 ArrayList list2=new ArrayList();
2 list2.add(1); //报错:add.(java.lang.String) in ArrayList cannot be applied to (int)
三、定义和使用含有泛型的类
定义一个含有泛型的类,模拟ArrayList集合
这里创建了类,但是不知道创建这个类的对象的时候会使用什么类型的数据,所以这里使用了泛型。泛型可以接收任意类型的数据
创建对象的时候再确定泛型的数据类型
ArrayList list =new ArrayList();
这里就把数据类型Integer 赋值给了 E
四、定义和使用含有泛型的方法:
定义含有泛型的方法:泛型定义在方法的修饰符和返回值类型之间。
格式:
修饰符 返回值类型 方法名(参数列表(使用泛型)){
//方法体
}
使用含有泛型的方法,在调用的时候再确定泛型的数据类型,传递的是什么类型的参数,泛型就是什么类型的数据
如:
public void method(M m){//方法体}
五、定义和使用含有泛型的接口:
1.第一种使用方式:定义接口的实现类,实现接口,指定接口的泛型
1 public interface Iterator{E next();}
2 //Scanner 类实现了Iterator接口,并指定接口的泛型为String,所以重写的next方法泛型默认就是String
3 public final class Scanner implements Iterator{
4 @Override
5 public String next(){//重写的方法体}
6 }
2.第二种使用方式:接口使用什么泛型,实现类就使用什么泛型,类跟着接口走
相当于定于了一个含有泛型的类,创建对象的时候确定泛型的类型
1 public interface List{
2 boolean add(E e);
3 E get(int index);
4 }
1 public class ArrayListimplements List{
2 public boolean add(E e){}
3 public E get(int index){}
4 }
六 泛型通配符
当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以用通配符>表示。
但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
1.通配符基本使用:? 代表任意的数据类型,不能创建对象使用,只能作为方法的参数使用
只能接收数据,不能往该集合中储存数据
注意:泛型没有继承关系
2.泛型的上限限定和下线限定
泛型的上限限定:? extends E 代表使用的泛型只能是E类型的子类/本身
泛型的下限限定:? super E 代表使用的泛型只能是E类型的父类/本身
Java中的泛型
标签:实现 cannot 多态 while 安全 元素 长度 new aaa
原文地址:https://www.cnblogs.com/shuijiu/p/15025393.html