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

简介: Java语言-----泛型的认识

😽个人主页: tq02的博客_CSDN博客-C语言,Java领域博主

🌈梦的目标:努力学习,向Java进发,拼搏一切,让自己的未来不会有遗憾。

🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注✨

 本章讲解内容:泛型

 使用编译器:IDEA


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


5448c2884c44051acb97afda8b236e72.jpg


一.什么是泛型


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


二.泛型类的使用

2.1泛型类的定义


泛型类的语法格式:

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

}

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

               // 这里可以使用类型参数

               }


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


代码实例:


2cb834b130724051b93a547b88101a93.png

  如图,输出为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];  //1
    public 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);            //2
        System.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>当成< T >来看,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;

                }


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


五.泛型与集合


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

代码示例:


23113567696d48b79b285b8483933b75.png


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

目录
相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
90 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
21天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
29天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
48 4
|
2月前
|
Java API
[Java]泛型
本文详细介绍了Java泛型的相关概念和使用方法,包括类型判断、继承泛型类或实现泛型接口、泛型通配符、泛型方法、泛型上下边界、静态方法中使用泛型等内容。作者通过多个示例和测试代码,深入浅出地解释了泛型的原理和应用场景,帮助读者更好地理解和掌握Java泛型的使用技巧。文章还探讨了一些常见的疑惑和误区,如泛型擦除和基本数据类型数组的使用限制。最后,作者强调了泛型在实际开发中的重要性和应用价值。
30 0
[Java]泛型
|
2月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
56 3
|
2月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
85 4
|
2月前
|
存储 安全 Java
🌱Java零基础 - 泛型详解
【10月更文挑战第7天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
18 1
|
2月前
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
27 5
|
2月前
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
19 1
|
2月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
22 2