Java语言-----泛型的认识

news/2024/11/29 9:42:52/

目录

一.什么是泛型

二.泛型类的使用

2.1泛型类的定义

 2.2泛型类的数组使用

三.泛型的上界 

四.泛型的方法

五.泛型与集合


😽个人主页: tq02的博客_CSDN博客-C语言,Java领域博主
 🌈梦的目标:努力学习,向Java进发,拼搏一切,让自己的未来不会有遗憾。
 🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注✨
  本章讲解内容:泛型
  使用编译器:IDEA 

  今日毒汤:远方的路,因为未知,才值得去。

一.什么是泛型

        当我们不确定数据类型时,我们可以暂时使用一个字母 T代替数据类型。例如写一个方法,但是我们不知道它是传递的是什么数据类型,我们就可以使用泛型,到时候只要指明T是什么数据类型,就可以使用了。可以设想一下typedef,而类和方法都有涉及到类。


二.泛型类的使用

2.1泛型类的定义

泛型类的语法格式:

 第一种:class 泛型类名称<类型形参列表> {
               // 这里可以使用类型参数
                }

第二种:  class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
                // 这里可以使用类型参数
                }

注:泛型只能接受类,所有的基本数据类型必须使用包装类!

代码实例:

       如图,输出为10,我们定义了一个Text1的泛型类,当我们实例化泛型类时,定义了T为Integer包装类,那么所有T都为Integer,如果换为String类,那么所有的T都为String类,因此T可以代表任何数据类型,方便我们指定类型传参。 

注:类名后的 <T> 代表占位符,表示当前类是一个泛型类

 2.2泛型类的数组使用

泛型使用数组时 :  T[] ts = new T[5];//是不对的

原因:在编译时时,会把T转换为Object,而Object范围很大,到时候就无法确定是什么数据类型了。

代码示例:

public class Text1<T> {public T[] array=(T[])new Object[10];  //1public T getPos(int pos)                {return this.array[pos];}public void setVal(int pos,T val){this.array[pos]=val;}public static void main(String[] args) {Text1<Integer> kk=new Text1<>();kk.setVal(0,3);kk.setVal(1,4);int C= kk.getPos(1);            //2System.out.println(C);}
}

 代码中,注释1,由于无法直接new T[10],但是我们知道Object是所有类的父类,因此我们可以使                                      用Object 然后再利用(T[ ])强制类型转换。

               注释2,由于C的类型是int类型,所以不需要强制类型转换。


三.泛型的上界

      上界,代表着是有上限的。特殊情况下:<T> 中的T也可能会是类,而想到类,我们可以试想,如果此类继承其它类的情况下会是什么样呢?

语法格式:

           class 泛型类名称<类型形参 extends 类型边界> {
...
}

示例:

        public class MyArray<E extends Number> {
        ...                                //相当于 < T >
        }

解析:可以把<E extends Number>当成>来看,Number可能是接口,也可能是类。而此时的T,有了限制,T的范围是 Number的子类

 :泛型无下界。


四.泛型的方法

      我们需要注意的是静态方法使用泛型

     语法格式:方法限定符  <类型形参列表>  返回值类型 方法名称(形参列表) { ... }

     示例:

       //静态的泛型方法 需要在static后用 <> 声明泛型类型参数
                public static <E> void swap(E[] array, int i, int j) {
                        E t = array[i];
                        array[i] = array[j];
                         array[j] = t;
                 }

:其他的方法不需要 用 <> 声明


五.泛型与集合

       在之后的使用中,我们经常会在集合中使用泛型,例如创建一个集合,但是你确定好了类型时,我们就可以使用泛型,来防止我们之后不会出现添加意外。

代码示例:

 如图,我们创建一个ArrayList集合,one对象的类型实参为Integer,所以只能存放整形数                                                                                   two对象的类型实参为String,所以我们只能存放字符串                   结论:一旦我们确定了类型,那么我们就只能存放该类型数据。


http://www.ppmy.cn/news/41701.html

相关文章

Python 进阶指南(编程轻松进阶):十三、性能测量和大 O 算法分析

原文&#xff1a;http://inventwithpython.com/beyond/chapter13.html 对于大多数小程序来说&#xff0c;性能并不那么重要。我们可能会花一个小时编写一个脚本来自动执行一个只需要几秒钟就能运行的任务。即使需要更长的时间&#xff0c;当我们端着一杯咖啡回到办公桌时&#…

Servlet入门讲解

文章目录简介快速入门执行流程生命周期方法介绍体系结构urlPattern配置XML配置简介 Servlet是JavaWeb最为核心的内容&#xff0c;它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现&#xff0c;根据不同的登录用户在页面上动态显示不同内容。 Servlet是JavaEE规…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的伽马变换算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强&#xff08;C#&#xff09;Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调…

SpringCloud微服务技术栈之网关服务Gateway

文章目录SpringCloud微服务技术栈之网关服务Gateway前言网关服务Gateway的基本概念Gateway的体系结构Gateway的主要功能网关服务Gateway的架构设计架构设计方案示例代码网关服务Gateway的实践操作1. 创建工程2. 配置路由规则3. 实现过滤器4. 集成服务注册中心5. 启动网关服务器…

面试题

用 C写一个函数&#xff0c;交换两个整型变量 int a 5, b 10; cout << "Before swapping: a " << a << ", b " << b << endl; swapVars<int>(a, b); cout << "After swapping: a " << a …

检测图中的负循环 | (贝尔曼福特)

我们得到了一个有向图。我们需要计算图形是否有负循环。负循环是循环的总和变为负的循环。 在图形的各种应用中都可以找到负权重。例如,如果我们沿着这条路走,我们可能会得到一些好处,而不是为一条路付出代价。 例子:

数据分析的目的和意义是什么?_光点科技

数据分析是一个越来越受到关注的领域&#xff0c;因为它可以帮助企业和组织利用数据来制定更明智的决策。数据分析的目的和意义是多方面的&#xff0c;例如&#xff1a; 1.了解客户需求 数据分析可以帮助企业更好地了解客户需求&#xff0c;从而制定更准确的市场营销策略。通过…

各种深度学习机器学习数据集(大多数内附读取脚本!)(建议按ctrl+F查询是否有需要的,持续更新中。。)

欢迎关注&#xff0c;高强度更新和MATLAB,PYTHON编程&#xff0c;C编程&#xff0c;算法编程&#xff0c;深度学习&#xff0c;自然语言处理&#xff0c;图像处理&#xff0c;OPENCV等相关知识:) 摘要 MNIST数据集、行人车辆检测数据集、安全头盔数据集、白酒数据集、成人数据…