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

177 阅读3分钟

通过优锐课的java学习笔记中,分享了关于泛型类型在Java集合中广泛使用。为什么我们需要Java中的泛型类型?理解这个问题可以帮助我们更好地理解许多相关概念。在本文中,我将使用一个非常简短的示例来说明泛型为什么有用。码了很多专业的相关知识, 分享给大家参考学习。

1.泛型概述

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

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

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

class Room {private Object object;public void add(Object object) {this.object = object;}public Object get() {return object;}}public class Main {public static void main(String[] args) {Room room = new Room();room.add(60);//room.add("60"); //this will cause a run-time errorInteger i = (Integer)room.get();System.out.println(i);}}

当我们添加一个整数并将其强制转换时,程序运行完全正常。但是,如果用户不小心将字符串

“ 60”添加到其中,编译器将不知道这是一个问题。程序运行时,将获得ClassCastException

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integerat collection.Main.main(Main.java:21)

你可能想知道为什么不只将字段类型声明为Integer而不是Object。如果是这样,那么room就没有太大用处了,因为它只能存储一种东西。

3.使用泛型时

如果使用通用类型,程序将变为以下内容。

class Room<T> {private T t;public void add(T t) {this.t = t;}public T get() {return t;}}public class Main {public static void main(String[] args) {Room<Integer> room = new Room<Integer>();room.add(60);Integer i = room.get();System.out.println(i);}}

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

我们可以轻松地看到它是如何工作的。另外,由于编译知道get()将返回Integer

,因此无需从room.get()强制转换结果。

4.总结

综上所述,使用泛型的原因如下:

·在编译时进行更强大的类型检查。

·消除显式转换。

·实现更好的代码可重用性,例如通用算法的实现

Java泛型类型只是一个编译时概念。在运行时,将擦除所有类型信息,这称为类型擦除。

这是一个有趣的示例,展示了如何避免Type Erasure的常见错误。


> 喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等

 > 如果你对java技术很感兴趣也可以交流学习,共同学习进步。 

> 不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货