java vector 泛型_廖雪峰Java4反射与范型-3范型-1什么是泛型

## 1.为什么需要泛型?

JDK提供了ArrayList,可以看作“可变长度”的数组:

比数组使用方便 示例1:如果使用ArrayList存储String类型:

需要强制转型

不方便,易出错

//演示代码

public class ArrayList1{

private Object[] array;

public void add(Object e){...}

public void remove(int index){...}

public Object get(int index){...}

}

public class Main {

public static void main(String[] args){

ArrayList1 list = new ArrayList1();

list.add("hello");

String one = (String) list.get(0);//需要强制转型

list.add(new Integer(123));//加入Integer类型,提示Error : ClassCastException

String second = (String) list.get(1);

}

}

示例2: 为了解决示例1中的问题,为String单独编写一种ArrayList:

不需要强制转型

编译器强制检查放入的类型

public class ArrayList1{

private String[] array;

public void add(String e){}

public void remove(int index){}

public String get(int index){return array[index];}

}

public class Main {

public static void main(String[] args){

ArrayList1 list = new ArrayList1();

list.add("hello");

String one = list.get(0);//不再需要强制转型

list.add(new Integer(123));//IDE就会提示编译错误,不需要等到编译时

String second = (String) list.get(1);

}

}

新的问题:还需要为其他所有从class单独编写一种ArrayList:Long, Double, Person, Integer。 必须把ArrayList变成一种模版.

1.1范型就是定义一种模版,例如ArrayList

在代码中为用到的类创建对应的ArrayList * ArrayList strList = new ArrayList();

编译器针对类型做检查 * strList.add("hello"); * strList.add(new Integer(123));//compile error

public class ArrayList1 {

private T[] array;

public void add(T e){}

public void remove(int index){}

public T get(int index){return array[index];}

}

public class Main {

public static void main(String[] args){

ArrayList1 strList = new ArrayList1();

ArrayList1 inList = new ArrayList1();

ArrayList1 flList = new ArrayList1();

}

}

2.泛型的继承关系

ArrayList1实现了List接口,ArrayList1可以向上转型为List.

//示例代码,忽略错误

public class ArrayList1 implements List {

private T[] array;

public void add(T e){}

public void remove(int index){}

public T get(int index){return array[index];}

//List的方法...

}

public class Main {

public static void main(String[] args){

ArrayList1 strList = new ArrayList1();

List list = new ArrayList();

}

}

不能把ArrayList1向上转型为ArrayList1或List

ArrayList1和ArrayList1两者没有继承关系。

而Number包含float的子类,ArrayList1不接受float。

import java.util.ArrayList;

//使用JDK的ArrayList

public class Main {

public static void main(String[] args){

ArrayList strList = new ArrayList();

strList.add("abc");

strList.add("xyz");

//strList.add(new Integer(123));

String first = strList.get(0);

System.out.println(first);

}

}

54e6f20a7ef6d04ebcefcf60bb05447a.png

3.总结:

泛型就是编写模版代码来适应任意类型

不必对类型进行强制转换

编译器将对类型进行检查

注意泛型的继承关系:

* 可以把ArrayList向上转型为List (T不能变)

* 不能ArrayList向上转型为ArrayList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值