为何有了接口,我们还需要使用泛型?因为即便使用了接口,对于程序的约束还是太强。因为一旦指明了接口,就会要求我们的代码使用特定的接口,而我们的目的是希望编写出更通用的代码,是要使代码能够应用于某种不确定的类型,而不是一个具体的接口或类。 泛型类 泛型的目的是用来指定容器要持有什么类型的对象,而由编译器来保证类型的正确性。使用泛型参数 T,用尖括号括住,放在类后。 /** * 使用泛型参数 T,用尖括号括住,放在类后 */ public class Tested { private T t; public void set(T t) { this.t = t; 泛型是Java编程中一种强大的工具,它允许程序员在定义类、接口以及方法时使用类型参数,从而提高代码的灵活性和可复用性。泛型的主要目标是提供编译时类型安全,确保在运行时避免类型转换异常。通过使用泛型,我们可以创建能够处理多种数据类型的通用代码,同时保持类型检查的严格性。 在Java中,泛型的使用主要体现在以下几个方面: 1. 泛型类:泛型类是带有类型参数的类,如例子中的`Tested<T>`。这里的`T`就是一个类型参数,代表某种未确定的类型。当我们实例化泛型类时,可以具体指定`T`的类型,如`Tested<Test1th>`,这样编译器会确保`Tested`对象只能持有`Test1th`类型的实例。`Tested`类中的`set`和`get`方法利用`T`作为参数和返回类型,确保了类型的一致性。 2. 多参数泛型:在`Tested`类的另一个版本中,我们看到可以同时指定多个类型参数,如`Tested<A, B>`,这样类就可以持有两种不同类型的对象。通过这种方式,我们可以创建更加灵活的类结构,以适应不同的数据组合需求。 3. 泛型接口:泛型也可以应用于接口,如`Iterable<T>`。当实现这个接口时,我们需要指定`T`的具体类型。在示例中,`Tested`实现了`Iterable`接口,这意味着它可以被用于循环遍历。`Tested`的`iterator()`方法返回了一个匿名内部类,这个内部类实现了`Iterator`接口,并使用泛型`TestBase`,确保返回的迭代元素都是`TestBase`的实例。 4. 泛型边界:在某些情况下,我们可能希望限制类型参数的类型。例如,我们可以指定`T extends SomeClass`,表示`T`必须是`SomeClass`或者`SomeClass`的子类。这称为类型参数的边界,它增强了泛型的灵活性,同时保证了类型的安全性。 5. 擦除:Java的泛型在编译后会被类型擦除,这意味着在运行时,所有的泛型信息都会丢失。但是,编译器会在源代码中插入适当的类型检查和转换,以确保类型安全。因此,尽管在运行时无法直接访问泛型信息,但编译时的类型检查仍然有效。 6. 类型转换:虽然泛型可以减少运行时的类型转换,但在某些情况下,比如从泛型集合获取元素时,可能仍需要进行类型转换。然而,由于编译器的检查,这些转换通常都是安全的。 总结来说,泛型提供了一种强大的方式来处理各种类型的数据,增强了代码的灵活性和安全性。通过理解并熟练运用泛型、边界和擦除,我们可以编写出更加健壮且易于维护的Java应用程序。在实际开发中,泛型被广泛应用于集合框架、数据结构和算法实现,以及自定义的容器类和工具类等。
剩余7页未读,继续阅读
- 粉丝: 4
- 资源: 932
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 一对一MybatisProgram.zip
- 时变动态分位数CoVaR、delta-CoVaR,分位数回归 △CoVaR测度 溢出效应 动态 Adrian2016基于分位数回归方法计算动态条件在险价值 R语言代码,代码更数据就能用,需要修改的
- 人物检测37-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 人物检测26-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 人和箱子检测2-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 清华大学2022年秋季学期 高等数值分析课程报告
- GEE错误集-Cannot add an object of type <Element> to the map. Might be fixable with an explicit .pdf
- 清华大学2022年秋季学期 高等数值分析课程报告
- 矩阵与线程的对应关系图
- 人体人员检测46-YOLO(v5至v9)、COCO、Darknet、TFRecord数据集合集.rar