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,所以我们只能存放字符串                   结论:一旦我们确定了类型,那么我们就只能存放该类型数据。

目录
相关文章
|
10天前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
111 10
|
6月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
212 5
|
3月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
209 14
|
3月前
|
安全 Java API
在Java中识别泛型信息
以上步骤和示例代码展示了怎样在Java中获取泛型类、泛型方法和泛型字段的类型参数信息。这些方法利用Java的反射API来绕过类型擦除的限制并访问运行时的类型信息。这对于在运行时进行类型安全的操作是很有帮助的,比如在创建类型安全的集合或者其他复杂数据结构时处理泛型。注意,过度使用反射可能会导致代码难以理解和维护,因此应该在确有必要时才使用反射来获取泛型信息。
123 11
|
4月前
|
Java 编译器 应用服务中间件
为什么说 Java 语言编译与解释并存的原因
在编程语言的世界里,Java以其独特的“编译与解释并存”特性独树一帜。这一特性不仅赋予了Java强大的跨平台能力,还使其在性能和灵活性上达到了很好的平衡。接下来,我们将深入探讨Java语言这一特性的本质、原理以及在实际应用中的体现。
97 6
|
3月前
|
JSON JavaScript 前端开发
Python+JAVA+PHP语言,苏宁商品详情API
调用苏宁商品详情API,可通过HTTP/HTTPS发送请求并解析响应数据,支持多种编程语言,如JavaScript、Java、PHP、C#、Ruby等。核心步骤包括构造请求URL、发送GET/POST请求及解析JSON/XML响应。不同语言示例展示了如何获取商品名称与价格等信息,实际使用时请参考苏宁开放平台最新文档以确保兼容性。
|
4月前
|
分布式计算 Java 大数据
Java 语言基础概念与常识之主要特点解析
Java是一种广泛应用于企业级开发、移动应用(如Android)、大数据处理及云计算等领域的编程语言。其核心特点包括跨平台性(一次编写,到处运行)、面向对象设计、自动垃圾回收、多线程支持和高性能表现。Java通过JVM实现跨平台,具备强大的健壮性和安全性,同时拥有丰富的标准库与活跃的开发者社区。本文深入解析Java的技术优势及其在电商系统、大数据处理和云计算中的实际应用,并提供相关面试资料供学习参考。
128 0
|
4月前
|
网络协议 安全 Java
实现Java语言的文件断点续传功能的技术方案。
像这样,我们就完成了一项看似高科技、实则亲民的小工程。这样的技术实现不仅具备实用性,也能在面对网络不稳定的挑战时,稳稳地、不失乐趣地完成工作。
253 0
|
8月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
823 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
7月前
|
存储 Java 数据安全/隐私保护
Java语言位运算符详解
Java语言提供了7种位运算符:按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(&lt;&lt;)、带符号右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;)。这些运算符主要用于对long、int、short、byte和char类型的数据进行二进制位级别的操作,不能用于double、float和boolean类型。文中详细讲解了每种运算符的规则和应用场景,并指出位运算在实际开发中有重要应用价值,不仅限于面试。
299 2

热门文章

最新文章