前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Java基础】Java中泛型的使用

【Java基础】Java中泛型的使用

作者头像
全栈开发日记
发布2022-05-12 20:00:21
发布2022-05-12 20:00:21
55400
代码可运行
举报
文章被收录于专栏:全栈开发日记全栈开发日记
运行总次数:0
代码可运行

本文都是干货,一些理论上东西我尽可能一笔带过,只写有用的内容。

本篇目录

1- 泛型是什么 2- 泛型的作用 3- 泛型的定义 4- 泛型的使用

1 泛型是什么

如下代码是一个使用了泛型的实体类,E表示这里类型使用的了泛型,意思是可以为任意类型,也包括引用数据类型。

代码语言:javascript
代码运行次数:0
运行
复制
public class Test<E> {
    private  E test;
    public Test(E test){
        this.test=test;
    }
    public E getTest(){
        return this.test;
    }
}

2 泛型的作用

在增加泛型之前,泛型相关程序是使用继承实现。因为我们知道Object是所有类的父类,也就是说所有类都继承了Object。所以在泛型之前是将参数和域的类型定义为Object,通过强制类型转换也能达到我们的目的。

但是由于这种程序设计我们无法提前预测数据的类型,也就导致了可以多类型的数据交互,而产生后续强制数据类型转换时无法确定该数据的类型。

在使用类型参数后,编译器就可以检测提供的数据类型是否错误,使程序具有更好的可读性和安全性。

代码语言:javascript
代码运行次数:0
运行
复制
List list=new ArrayList();
list.add(1);
list.add("测试");

在如上代码中,我没有指定泛型的类型,但是程序依然可以运行,并且无任何异常;可在将数据读出来后,我们无法判断该数据的具体类型,如果将一个String类型的数据强制赋值给Integer则会报错。

3 泛型的定义

定义泛型需要在类名或接口名后指定泛型,格式如:

代码语言:javascript
代码运行次数:0
运行
复制
public class Test<E>{}

这里的大写英文字母并不是必须是E,但在开发规约中,泛型一般使用E、K、V、T来定义泛型。

4 泛型的使用

定义了泛型后,可在类中代码中即可使用该字母作为数据类型来定义变量。

代码语言:javascript
代码运行次数:0
运行
复制
public class Test<E>{
  public E test;
}

从如上代码中你知道test变量是一个什么类型吗,显然现在无法回答,因为我们没有对它进行初始化,没有对它进行赋值。

代码语言:javascript
代码运行次数:0
运行
复制
Test<String> t=new Test<>();

现在我对它进行了初始化,将泛型E赋予了String类型,所以现在类中的test变量就是String类型。

看到这里你们有没有觉得它很熟悉,好像我们在开发中哪里见到过。没错,Java的很多地方都大规模的使用了泛型,接触最多就是集合框架中泛型,如:

代码语言:javascript
代码运行次数:0
运行
复制
List<String> list=new ArrayList<>();

这是我们在初始化一个ArrayList实例对象,并且指定了它的泛型为String类型,也就是说我们接下来要在List中添加元素的话,只能添加String类型,添加其它的类型元素则会报错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档