首页 > 编程语言 >Java泛型

Java泛型

时间:2024-07-05 10:58:49浏览次数:22  
标签:Java List 类型 参数 泛型 public

Java泛型

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数据进行排序,我们就可以使用Java泛型。

1.泛型方法(<E>)

可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

// 泛型方法printArray
public static <E> void printArray(E[] inputArray){
    for(E element : inputArray){
        System.out.printf("%s",element);
    }
}
  1. <? extends T>表示该通配符所代表的类型是T类型的子类。
  2. <? super T> 表示该通配符所代表的类型是T类型的父类。

2.泛型类(<T>)

泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,用于指定一个泛型类型名称的表示符。因为他们接收一个或多个参数,这些类被称为参数化的类或参数化的类型。

public class Box<T>{
    private T t;
    public void add(T t){
        this.t = t;
    }
    public T get(){
        return t;
    }
}

3.类型通配符?

类型通配符一般是使用?代替具体的类型参数。例如List<?>在逻辑上是List<String>,List<Integer>等所有List<具体类型实参>的父类。

4.类型擦除

Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。如在代码中定义的List<Object>和List<String>等类型,在编译之后都会变成List。JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。类型擦除的基本过程也比较简单,首先是找到用来替换类型参数的具体类。这个具体类一般是Object。如果指定了类型参数的上界的话,则使用这个上界。把代码中的类型参数都替换成具体的类。

标签:Java,List,类型,参数,泛型,public
From: https://blog.csdn.net/m0_73770897/article/details/140202501

相关文章

  • Java 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)
    这里函数采用两个参数n和k,并返回二项式系数C(n,k)的值。 例子: 输入:n=4和k=2输出:6解释:4C2等于4!/(2!*2!)=6输入:n=5和k=2输出:10解释:5C2等于5!/(3!*2!)=10        在本文中,我们讨论了O(n*k)时间和O(k)额外空间算法。C(n,......
  • JavaWeb—jsp篇
    概述JavaServerPages:java服务器端页面      可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码      用于简化书写 原理jsp实际就是一个servletjsp就是java代码  脚本<% 代码%>:定义的java代码,在service方法中。......
  • java分批读取excel中数据处理
     java分批读取excel中数据处理在Java中,可以使用ApachePOI库来读取和处理Excel数据。以下是一个简单的例子,展示了如何分批次读取Excel文件中的数据。importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjava......
  • 邮件显示统计图表echarts-java+phantomjs实现
    邮件显示统计图表echarts-java+phantomjs实现项目背景是产品业务上的订阅推送,纯java后端实现,通过邮件将统计报表发送给用户。这里会涉及一些关键点:首先是统计图表的生成,我们采用常见的echarts,简单易用,支持图表类型丰富美观;java后端实现可使用echarts-java来实现图表的生成......
  • BeanUtil复制时,两对象中数据类型不一致导致的问题Can not set java.time.LocalDateTim
    @DatapublicclassAVo{privateLongendTime;privateStringname;privateStringid;}@DatapublicclassABVo{privateLocalDateTimeendTime;privateStringname;privateStringid;}AVoaVo=newAVo();......
  • 一些java中记忆的问题
    什么是封装封装是将对象的属性和方法(或称为成员)结合成一个独立的单元,隐藏对象的属性和实现细节,仅对外公开接口(方法)与对象进行交互。链表数据结构链表是一种常见的数据结构,它由一系列节点(Node)组成,每个节点包含数据和一个或多个指向其他节点的引用(即指针)。与数组不同,链表中......
  • Java程序基础
    类名要求:类名必须以英文字母开头,后接字母,数字和下划线的组合习惯以大写字母开头要注意遵守命名习惯,好的类命名:HelloNoteBookVRPlayer不好的类命名:helloGood123Note_Book_World注意到public是访问修饰符,表示该class是公开的。不写public,也能正确编译,但是这个类......
  • Java_MyBatis框架:MyBatis框架
    MyBatis的执行流程先加载配置文件再通过SqlSessionFactoryBuilder创建SqlSessionFactory对象获取SqlSession生成代理对象执行Excutor匹配执行SQL语句MyBatis的一级缓存和二级缓存一级缓存:也叫SqlSession级缓存,无需手动开启,可直接使用,为每个SqlSession单独分配的缓存空间,......
  • Java_多线程:线程池
    1、线程池优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一......
  • 基于Java+SpringBoot+Vue的学生宿舍管理系统的设计与开发(源码+lw+部署文档+讲解等)
    文章目录前言项目背景介绍技术栈后端框架SpringBoot前端框架Vue数据库MySQL(MyStructuredQueryLanguage)具体实现截图详细视频演示系统测试系统测试目的系统功能测试系统测试结论代码参考数据库参考源码获取前言......