哪里有学做ppt的网站,珠海网站建设尚古道策略,绍兴网络公司网站建设,网站推广宣传方案文章目录 1. 什么是泛型#xff1f;1.1 背景1.2 泛型的概念1.3 泛型的好处 2. 泛型类、接口...2.1 泛型类2.2 从泛型类派生子类2.2.1 子类也是泛型类#xff0c;子类和父类的泛型类型要一致2.2.2 子类不是泛型类#xff0c;父类要明确泛型的数据类型 2.3 泛型接口2.4 泛型方… 文章目录 1. 什么是泛型1.1 背景1.2 泛型的概念1.3 泛型的好处 2. 泛型类、接口...2.1 泛型类2.2 从泛型类派生子类2.2.1 子类也是泛型类子类和父类的泛型类型要一致2.2.2 子类不是泛型类父类要明确泛型的数据类型 2.3 泛型接口2.4 泛型方法2.5 类型通配符2.5.2 类型通配符的上限2.5.3 类型通配符的下限 3. 类型擦除3.1 无限制类型擦除3.2 有限制类型擦除3.3 擦除方法中类型定义的参数3.4 桥接方法3.5 泛型与数组3.5.1 泛型数组的创建 3.6 泛型和反射3.6.1 反射常用的泛型类 【后端网络大数据数据库目录贴】 参考视频 1. 什么是泛型
1.1 背景 JAVA推出泛型以前程序员可以构建一个元素类型为Object的集合该集合能够存储任意的数据类型对象而在使用该集合的过程中需要程序员明确知道存储每个元素的数据类型否则很容易引发ClassCastException异常。 1.2 泛型的概念 Java泛型generics是JDK5中引入的一个新特性泛型提供了编译时类型安全监测机制该机制允许我们在编译时检测到非法的类型数据结构。 泛型的本质就是参数化类型也就是所操作的数据类型被指定为一个参数。 1.3 泛型的好处 类型安全消除了强制类型的转换 2. 泛型类、接口…
2.1 泛型类 泛型类的定义语法 class 类名称 泛型标识泛型标识… {private 泛型标识 变量名; .....
}常用的泛型标识T、E、K、V 使用语法 类名具体的数据类型 对象名 new 类名具体的数据类型();Java1.7以后后面的中的具体的数据类型可以省略不写(菱形语法) 类名具体的数据类型 对象名 new 类名();泛型类注意事项 泛型类如果没有指定具体的数据类型此时操作类型是Object泛型的类型参数只能是类类型不能是基本数据类型泛型类型在逻辑上可以看成是多个不同的类型但实际上都是相同类型 2.2 从泛型类派生子类
2.2.1 子类也是泛型类子类和父类的泛型类型要一致 class ChildGenericT extends GenericT 2.2.2 子类不是泛型类父类要明确泛型的数据类型 class ChildGeneric extends GenericString 2.3 泛型接口 泛型接口的定义语法 interface 接口名称 泛型标识泛型标识… {泛型标识 方法名(); .....
}泛型接口的使用 实现类不是泛型类接口要明确数据类型 实现类也是泛型类实现类和接口的泛型类型要一致 2.4 泛型方法 泛型类是在实例化类的时候指明泛型的具体类型。 泛型方法是在调用方法的时候指明泛型的具体类型。 语法 public与返回值中间T非常重要可以理解为声明此方法为泛型方法。只有声明了T的方法才是泛型方法泛型类中的使用了泛型的成员方法并不是泛型方法 3. T表明该方法将使用泛型类型T此时才可以在方法中使用泛型类型T与泛型类的定义一样此处T可以随便写为任意标识常见的如T、E、K、V等形式的参数常用于表示泛型。泛型方法的泛型标志独立于泛型类,(泛型类使用T,泛型方法也可以使用T,不冲突)(泛型方法能使方法独立于类而产生变化)如果static方法要使用泛型能力就必须使其成为泛型方法.(成员方法使用类的泛型不可以) 修饰符 TE, ... 返回值类型 方法名(形参列表) {方法体...
}可变参数泛型方法 public E void print(E... e){for (E e1 : e) {System.out.println(e);}}2.5 类型通配符 类型通配符一般是使用?代替具体的类型实参。 所以类型通配符是类型实参而不是类型形参。(经过查询资料,并不是实参的说法) 语法 类/接口? 2.5.2 类型通配符的上限 语法 类/接口? extends 实参类型 要求该泛型的类型只能是实参类型或实参类型的子类类型。(不能够填充任何类型数据) 2.5.3 类型通配符的下限 语法 类/接口? super 实参类型 要求该泛型的类型只能是实参类型或实参类型的父类类型。(可以填充任何类型数据) 注意: //问题1:不能重载,本质依然是同一类型(泛型是同一类型)public void showBox(BoxNumber box) {Number first box.getFirst();System.out.println(first);}public void showBox(BoxInteger box) {Number first box.getFirst();System.out.println(first);}//问题2:这里不能通过多态理解,多态理解不能接收Integerpublic void showBox(BoxNumber box) {Number first box.getFirst();System.out.println(first);}3. 类型擦除 泛型是Java 1.5版本才引进的概念在这之前是没有泛型的但是泛型代码能够很好地和之前版本的代码兼容。那是因为泛型信息只存在于代码编译阶段在进入JVM之前与泛型相关的信息会被擦除掉我们称之为–类型擦除。 3.1 无限制类型擦除 3.2 有限制类型擦除 3.3 擦除方法中类型定义的参数 3.4 桥接方法 3.5 泛型与数组
3.5.1 泛型数组的创建
可以声明带泛型的数组引用但是不能直接创建带泛型的数组对象可以通过java.lang.reflect.Array的newInstance(ClassT,int)创建T[]数组
3.6 泛型和反射
3.6.1 反射常用的泛型类
ClassTConstructorT