泛型,泛型擦除,T extends class
-
泛型本质就是 参数化类型
-
作用是提高Java程序的类型安全。并且还可以更好的代码复用性
- 比如BaseDao,BaseService
-
注意事项泛型不接受基本数据类型,不能有LIst这种形式出现
-
Java中的泛型是假泛型,因为在Java运行期间,所有的泛型信息都会被擦除,这个就是所谓的类型擦除。
-
泛型擦除的实例作用:
-
List<String> l1 = new ArrayList<String>(); List<Integer> l2 = new ArrayList<Integer>(); System.out.println(l1.getClass() == l2.getClass());
-
最后的结果是true
-
原因就是泛型信息只存在于代码编译阶段,在进入JVM之前,泛型相关信息会被擦除,只留下个list.class
-
-
-
在了解了泛型擦除之后再看下面代码(目的就是想要一个list能够跳过编译器存储String类型的数据)
public class ToolTest {
public static void main(String[] args) {
List<Integer> ls = new ArrayList<>();
ls.add(23);
// ls.add("text");
Method method = ls.getClass().getDeclaredMethod("add",Object.class);
method.invoke(ls,"test");
method.invoke(ls,42.9f);
}
- 最后再介绍一下<T extends 数据类型>
和
<? extentds 数据类型>- T指定的是某一种具体的类型,这个类型是确定的
- ?是一种未知的类型,调用方法的时候参数既可以是List也可以是List
- 现有一个水果fruits父类,apple子类,现有一个类class A
- 使用T extends fruits限定了泛型的上边界
- 该类创建对象的时候限定了只能建立水果类和他的所有子类才行
- new A or new A