标签:java泛型学习
JAVA泛型学习
泛型是JAVA在JDK1.5提出的新特性,主要是为了代码的安全性和代码的重复利用。
安全性:在没有提出泛型时,主要是通过传递Object来实现传入类型的引用,然后在取得数据时进行强制类型转换,但是这样会存在一个问题,就是比如一个集合中存入了A类型的数据,然后遍历集合获取A类型的数据时,需要(A)Object来强制转换,如果集合中也存入了一个B类型的数据,那么在编译期间不会报问题,运行时就会出现问题,因为无法将一个B类型的数据转换为A类型的数据,也就是类型转换异常。为了解决这个问题,提出了泛型的概念。这样就可以在将B存入集合前就进行限定,并且在取数据时,无需强制类型转换,减少了代码的运行异常错误。
我们知道数组是相同数据类型的一个集合,缺点就是数组的容量是固定的,无法动态的扩展。如果集合对放入其中的对象类型做一个限定,也就可以看成为一个相同对象类型且能动态扩展容量的对象“数组”(集合)。这样我们在存入数据和取出数据时,都能知道数据的类型,泛型就是提供这种想法的功能实现。
代码重复利用:也有解释为动态功能,即能根据运行时传递的类型来自动匹配.
1) 泛型类
public class Demo<E>{
private E e;
Demo(E e){
this.e=e;
}
public E getE(){
return e;
}
}
String b="hello";
Demo demo=new Demo(String b);
String a=demo.getE();
Demo demo1=new Demo(30);//这里不是基本类型,而是自动封装为Integer对象传递。
Integer iter=demo1.getE();
从上面可以看出,通过传递不同的引用类型给类,即可得到对应的引用类型对象。
2)泛型方法(泛型方法与泛型类没有必然的关系,可以是普通类,但是类中方法为泛型方法)
public class Test{
public <E> void demo(E e){
System.out.println(E.class.getName()); //输出class对象的名称
}
public <E> E demo1(E e){
....
return e;
}
}
3)泛型接口
public interface Test<E>{
.....
}
4)通配符 ? 如果不对?进行类型的限定,则可以传递Object或者其子类进入.(任意类都可以)
? extends E:代表只能传递进入E或者E的子类。
? super E:代表只能传递E或者E的父类。
5)多重泛型
? extends E & interface名 & interface名1 ..... 代表E及其子类并实现了后面的接口的类。
标签:java泛型学习
原文地址:http://20150523.blog.51cto.com/10261028/1659615