wordpress搬站,正规seo服务商,建设网站广告语,天津中小企业建设网站目录
1.什么是泛型 2.引出泛型
2.1语法
3. 泛型类的使用
3.1 语法
4 泛型如何编译的
4.1 擦除机制
5.泛型的上下界
5.1 语法 6.注意 1.什么是泛型 一般的类和方法#xff0c;只能使用具体的类型: 要么是基本类型#xff0c;要么是自定义的类。如果要编写可以应用于…目录
1.什么是泛型 2.引出泛型
2.1语法
3. 泛型类的使用
3.1 语法
4 泛型如何编译的
4.1 擦除机制
5.泛型的上下界
5.1 语法 6.注意 1.什么是泛型 一般的类和方法只能使用具体的类型: 要么是基本类型要么是自定义的类。如果要编写可以应用于多种类型的 代码这种刻板的限制对代码的束缚就会很大。------- 来源《Java编程思想》对泛型的介绍。 泛型是在JDK1.5引入的新的语法通俗讲泛型就是适用于许多许多类型。从代码上讲就是对类型实现了参数化。 2.引出泛型 泛型的主要目的就是指定当前的容器要持有什么类型的对象。让编译器去做检查。此时就需要把类型作为参数传递。需要什么类型就传入什么类型。
2.1语法
class 泛型类名称类型形参列表 {
// 这里可以使用类型参数
}
class ClassNameT1, T2, ..., Tn {
}class 泛型类名称类型形参列表 extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
class ClassNameT1, T2, ..., Tn extends ParentClassT1 {
// 可以只使用部分类型参数
} 注意 1.类名后的 T 代表占位符表示当前类是一个泛型类 了解 【规范】类型形参一般使用一个大写字母表示常用的名称有 E 表示 Element K 表示 Key V 表示 Value N 表示 Number T 表示 Type S, U, V 等等 - 第二、第三、第四个类型 2.不需要进行类型转换 3. 泛型类的使用
3.1 语法 泛型类类型实参 变量名; // 定义一个泛型类引用
new 泛型类类型实参(构造方法实参); // 实例化一个泛型类对象MyArrayInteger list new MyArrayInteger();当编译器可以根据上下文推导出类型实参时可以省略类型实参的填写。
例如: MyArrayInteger list new MyArray(); // 可以推导出实例化需要的类型实参为 Integer 泛型是将数据类型参数化进行传递 使用 T 表示当前类是一个泛型类。 泛型目前为止的优点数据类型参数化编译时自动进行类型检查和转换 4 泛型如何编译的 4.1 擦除机制 让我么来了解一下泛型到底是怎么编译的 通过命令javap -c 查看字节码文件所有的 T 都是 Object 。 在编译的过程当中将所有的T替换为Object这种机制我们称为擦除机制。 Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。 5.泛型的上下界 在定义泛型类时有时需要对传入的类型变量做一定的约束可以通过类型边界来约束。 5.1 语法 class 泛型类名称类型形参 extends 类型边界 {
...
}
public class MyArrayE extends Number {
...
}MyArrayInteger l1; // 正常因为 Integer 是 Number 的子类型
MyArrayString l2; // 编译错误因为 String 不是 Number 的子类型
下界通配符 ? super T
// 下界通配符 ? super T
class 泛型类名称类型形参 extends 类型边界 {
...
}
public class MyArrayE super Number {
...
}MyArray(Float) l1;// 编译正确 // Object 是 Number 的父类 MyArray(Object) l2;// 编译错误 6.注意 注意 不能new泛型类型的数组 public T [] array ( T []) new Object [ 10 ]; // 是不对的 通俗讲就是返回的数组里面可能存放的是任何的数据类型可能是 String 可能是 Person 运行的时 候直接转给Integer 类型的数组编译器认为是不安全的. public T [] array ;//正确 泛型提供了一些好处如改进的类型安全性、代码重用和更干净的代码。它们允许你编写更通用的算法和数据结构可以处理不同的类型而不会牺牲编译时的类型检查。通过使用泛型你可以创建更加健壮和可维护的Java代码。 结语泛型的相关分享到这里就结束了希望对大家的学习会有帮助如果大家有什么问题或者不同的见解欢迎大家评论区的留言 感谢支持