Java中泛型使用的必要性
写过代码的小伙伴们肯定都用过,泛型类型主要用于Java集合中;那么我们为什么要在Java集合中使用泛型呢?带着这个问题,我们看下面的一些概念描述,将有助于理解这个问题。下面的文章中,我将使用一个简单例子来说明这个问题。
网络配图 1、首先我们先了解一下泛型的概述 Java中实现泛型的目的是要在编译时及时发现错误,而不是在运行时才出现问题。因为在编译时发现错误并调试程序可以节省很多时间,因为在编译时错误更容易找到并得到修复;大家一定要记住泛型类型只存在于编译时。这是我们学习Java泛型最重要的一个知识点。 2、假设Java中没有引入泛型,会发生什么呢? 我先定义一个“汽车(Car)”类,在类中定义一些成员变量,如字符串、整数等;看如下代码:
class Car {
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) {
Car car = new Car();
car.add(100);
Integer i = (Integer) car.get();
System.out.println(i);
}
}
现在运行程序没有任何问题,因为我们添加一个整数,但如果用户一不小心添加一个字符串“100”,代码编译时,编译器并不知道这是一个问题,当然也不会报错。只有在程序运行时,会提示一个ClassCastException异常。 Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at collection.Main.main(Main.java:21) 到这里你可能会说我直接定义一个整数类型而不是对象;但你有没有想过,一个汽车是有很多部件组成的,定义一个变量也就没什么用了。 3、以下代码中使用了泛型,会是什么结果?
网络配图 如果使用泛型,程序代码如下:
class Car<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) {
Car<Integer> room = new Car<Integer>();
room.add(100);
Integer i = room.get();
System.out.println(i);
}
}
如果现在代码中写成room.add(“100”),编译时就会提示错误上面的错误,程序员很容易就发现了,而不是到了运行时才出现。
网络配图 最后总结一下,代码中使用泛型的原因有哪些: (1)、强制要求编译器在编译时检查代码,发现错误; (2)、消除显式类型转换的问题; (3)、使代码有更好的可重用性; 有没有说到的地方,欢迎补充!!!
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 深入剖析.NETCORE中CORS(跨站资源共享)
- 网络安全实验室平台(基础关)
- Unity 基于excel2json批处理读取Excel表并反序列化
- dotnet OpenXML 文本 Text Line Break 的作用
- CVE-2020-1362 漏洞分析
- wpa_supplicant 框架
- 【LeetCode每日一题】25. Reverse Nodes in k-Group
- upload-labs第一关
- upload-labs第2~8关
- dotnet OpenXML 文本 ParagraphProperties 的属性作用
- 相信坚持的力量!Elastic 日报 1000期+ 了......
- dotnet OpenXML 文本 EndParagraphRunProperties 的作用
- dotnet OpenXML 文本字体的选择规则
- 获取手机nfc的MW version 和 FW version 记录
- Sublime编辑器配置Python环境