浅谈泛型
1. 与Object的不同
先看一段代码
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中存放Object,在进行类型转换时,会报错。如果使用了泛型,那么就限定了list中存放的数据类型。
2. 使用泛型的好处
- 类型安全。泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。
- 消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
- 潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。
3. 泛型常见应用场景
- 基础应用 BaseBean
- 高级应用 通配符
- 不想写多个重载函数的场景。
- 约束对象类型的场景,可以定义边界(T extends …),如JDK集合List,Set。
- 用户希望返回他自定义类型的返回值场景,如Json返回Java bean。
- 在用反射的应用中,也经常会用到泛型,如Class