为什么我们需要Java中的泛型类型?

泛型类型在Java集合中广泛使用。为什么我们需要Java中的泛型类型?理解这个问题可以帮助我们更好地理解许多相关概念。在本文中,我将使用一个非常简短的示例来说明Generic为什么有用。在这里插入图片描述

1.泛型概述

实现泛型的目的是在编译时而不是运行时中发现错误。在编译时查找错误可以节省调试Java程序的时间,因为编译时错误更容易查找和修复。泛型类型仅在编译时存在。这是学习Java泛型时要记住的最重要的事情。

2.如果没有泛型怎么办?

在以下程序中,“ Room”类定义一个成员对象。我们可以将任何对象传递给它,例如String,Integer等。
课堂室{

私有 对象对象;

public  void add (对象对象) { 
	this。对象 =对象; 
}

公共 对象 get () { 
	返回对象; 
} }

公共 类 Main {
公共 静态 void main (String [ ] args ) {
Room room = new Room ();
房间。加(60 );
//room.add("60“); //这将导致运行时错误
Integer i = (Integer )房间。得到();
系统。出来。println ( i );
}}
当我们添加一个整数并将其强制转换时,程序运行完全正常。但是,如果用户不小心将字符串“ 60”添加到其中,编译器将不知道这是一个问题。程序运行时,将获得ClassCastException。
线程“主”中的异常java.lang.ClassCastException:无法将java.lang.String强制转换为java.lang.Integer
在collection.Main.main(Main.java:21)
您可能想知道为什么不只将字段类型声明为Integer而不是Object。如果是这样,那么房间就没有太大用处了,因为它只能存储一种东西。

3.使用泛型时

如果使用通用类型,程序将变为以下内容。
类间< Ť > {

私人 T t ;

public  void add ( T t ) { 
	此。t  = t ; 
}

公共 T get () { 
	返回 t ; 
} }

公共 类 Main {
公共 静态 void main (String [ ] args ) {
Room < Integer > room = new Room < Integer > ();
房间。加(60 );

	整数 i =房间。得到(); 
	系统。出来。println ( i ); 
} }

现在,如果有人添加room.add(“ 60”),则将显示如下编译时错误:

我们可以轻松地看到它是如何工作的。另外,由于编译知道get()将返回Integer,因此无需从room.get()强制转换结果。

4.总结

综上所述,使用泛型的原因如下:
在编译时进行更强大的类型检查。
消除显式转换。
实现更好的代码可重用性,例如通用算法的实现

Java泛型类型只是一个编译时概念。在运行时,将擦除所有类型信息,这称为类型擦除。这是一个有趣的示例,展示了如何避免Type Erasure的常见错误。
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。在这里插入图片描述

发布了38 篇原创文章 · 获赞 8 · 访问量 2695

猜你喜欢

转载自blog.csdn.net/zhaozihao594/article/details/103990933