详解Java中的泛型

 更新时间:2023年05月08日 10:54:11   作者:tq02  
这篇文章主要介绍了Java中的泛型,当我们不确定数据类型时,我们可以暂时使用一个字母 T代替数据类型,例如写一个方法,但是我们不知道它是传递的是什么数据类型,我们就可以使用泛型,到时候只要指明T是什么数据类型,就可以使用了,需要的朋友可以参考下

一.什么是泛型

当我们不确定数据类型时,我们可以暂时使用一个字母 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];  //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;
                 }

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

五.泛型与集合

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

代码示例:

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

到此这篇关于详解Java中的泛型的文章就介绍到这了,更多相关Java泛型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java类加载机制实现流程及原理详解

    Java类加载机制实现流程及原理详解

    这篇文章主要介绍了Java类加载机制实现流程及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • JavaWeb中struts2实现文件上传下载功能实例解析

    JavaWeb中struts2实现文件上传下载功能实例解析

    这篇文章主要介绍了JavaWeb中struts2文件上传下载功能的实现,在Web应用系统开发中,文件上传和下载功能是非常常用的功能,需要的朋友可以参考下
    2016-05-05
  • Mybatis整合Spring 由于版本引起的BUG问题

    Mybatis整合Spring 由于版本引起的BUG问题

    这篇文章主要介绍了Mybatis整合Spring 由于版本引起的BUG问题,需要的朋友可以参考下
    2017-06-06
  • 全面解读Java编程中的内部类

    全面解读Java编程中的内部类

    这篇文章主要介绍了Java的内部类,包括类成员访问等Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 线程池FutureTask异步执行多任务实现详解

    线程池FutureTask异步执行多任务实现详解

    这篇文章主要为大家介绍了线程池FutureTask异步执行多任务实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Spring针对AOP详细讲解

    Spring针对AOP详细讲解

    Spring是一个广泛应用的框架,SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,对项目开发提供了极大地便利
    2022-06-06
  • Java中如何使用正则表达式提取各种类型括号中的内容

    Java中如何使用正则表达式提取各种类型括号中的内容

    最近在工作中遇到一个问题,就是需要一个字符串中每一个中括号里的内容,下面这篇文章主要给大家介绍了关于Java中如何使用正则表达式提取各种类型括号中的内容,需要的朋友可以参考下
    2023-06-06
  • Spring4整合Hibernate5详细步骤

    Spring4整合Hibernate5详细步骤

    本篇文章主要介绍了Spring4整合Hibernate5详细步骤,具有一定的参考价值,有兴趣的同学可以了解一下
    2017-04-04
  • Java使用反射获取list泛型过程浅析

    Java使用反射获取list泛型过程浅析

    这篇文章主要介绍了Java使用反射获取list泛型过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Java中的堆排序详解

    Java中的堆排序详解

    这篇文章主要介绍了Java中的堆排序详解,堆排序的重点,在于排序的方式,堆排序,就是以堆的形式去排序,毫无疑问,了解堆很重要,文中提供了图解与部分代码,需要的朋友可以参考下
    2023-08-08

最新评论