泛型
@Author:云都小生
为什么要使用泛型
Java的泛型提供了一种编译时类型检测机制,允许程序在运行时检测到非法的类型。这句话可能你看不懂,没关系,我引用许多相关文章中都会出现的一个例子。
import java.util.*;
public class GenericTest {
public static void main(String[] args) {
List list = new ArrayList();
list.add("qqyumidi");
list.add("corn");
list.add(100);
for (int i = 0; i < list.size(); i++) {
String name = (String) list.get(i); // 1
System.out.println("name:" + name);
}
}
}
在程序中,我们在List中存放两个String和一个Integer的数据,这是可以的,因为List可接受的数据类型是Object。当程序第三次执行到//1时。 get到最后一个数就会出错,因为前面的括号进行强制转换,把Integer类型转换成String类型。这种错误是很难排除的,因为在编译过程并不会出错,只有程序运行起来才会出错。
在Java中,我们可以使用泛型,可以很好的避免这种异常。使用泛型,可以直接限定List集合中只能含有String类型的元素,这样我们就不需要强制转换了。在编译的过程中,如果我们想往已经限定是String的集合中存放Interger,在编译过程中就会出错。
import java.util.*;
public class GenericTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("qqyumidi");
list.add("corn");
list.add(100); //1
for (int i = 0; i < list.size(); i++) {
String name = (String) list.get(i);
System.out.println("name:" + name);
}
}
}
这样一来,编译之前在//1的位置就会报错,这就是泛型的好处。
泛型类
如果想了解泛型背后的基本原理,我们就需要通过自己定义的一个泛型类来看看。当然,泛型还有更深层的原理。
public class Test {
public static void main(String[] args) {
Typx<String> t1 = new Typx<String>();
t1.Typx("100");
t1.printData();
Typx<Integer> t2 = new Typx<Integer>();
t2.Typx(100);
t2.printData();
}
}
public class Typx<T> {
private T data;
void Typx(T data)
{
this.data = data;
}
public void printData()
{
System.out.println(data);
}
}
我们定义了一个Typx类,给了一个泛型形参(Typx类名后面)T。在创建对象的时候,我们给该对象传入了具体的实参。我们一般使用T、E、K、V来表示泛型形参。
记住一点,泛型就是用来限定,我们每次能传入的是什么类型的数据。目的就是为了在编译之前能够检查,防止在程序运行过程中会出错。
以上,便是泛型的简单了解和简单运用。
2017/9/18 11:46:03 @Author:Cloudking