当前位置: 首页 > news >正文

java 泛型

  1. 概述
    泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。

泛型,就是类型参数。

一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。
那么类型参数理解呢?
顾名思义,就是将原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

举个例子:

Arraylist<String> list =new ArrayList<>();

String 就是确定了list中元素类型只能是String,其他类型只能会编译器报错。

泛型的本质是为了参数化类型,(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。

也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

2.简单泛型类
就是具有几个泛型变量的类
例如:一个泛型变量T(泛型变量的个数是指尖括号中的泛型个数)

public class Pair<T>
{private T first;private T second;public T getFirst() {return first;}public void setFirst(T first) {this.first = first;}public T getSecond() {return second;}public void setSecond(T second) {this.second = second;}public Pair(T first, T second) {this.first = first;this.second = second;}}

泛型类也可以有多个类型泛型变量,例如,

public class Pair<T,U>
{...
}

用具体的类型替换泛型变量就可以实例化简单泛型类,例如:

Pair<String>

3.泛型简单方法

class ArrayALg{public static <T> T getMiddle(T... a){return a[a.length/2];}
}

这个方法是在一般类中定义的,泛型变量<T>放在 public static 后面。返回类型之前。

调用泛型方法时候,可以省略泛型的参数,编译器会从其他信息中去获取这个泛型是什么数据类型。

String middle=ArrayALg.getMiddle("a","b","c");

哪里用到了泛型,编译器会得到这个泛型的具体信息。

4.泛型变量限定
这个是计算最小值

public static <T> T min(T[] a)
{if(a==null || a.length==0return null;T smallest =a[0];for(int i=1;i<a.length;i++){if(smallest.compareTo(a[i]>0)){smallest=a[i];}return samllest;}
}

这个是比较数值,但是泛型是T,表示任何一个类的对象。那怎么去限制T的类型范围?
用关键字extends
将T的范围限制在Comparable接口

public static <T extends Comparable> T min(T[] a)...

一个泛型变量或通配符可以有很多个限定,例如:

T extends Comparable & Serializable

限定类型用&分隔,而逗号来分隔泛型变量

http://www.lryc.cn/news/144972.html

相关文章:

  • git 查看/配置 local/global 用户名称和用户邮箱
  • 无涯教程-分类算法 - 简介
  • python venv 打包,更换路径后,仍然读取到旧路径 ,最好别换路径,采用docker封装起来
  • MATLAB算法实战应用案例精讲-【自然语言处理】语义分割模型-DeepLabV3
  • road to master
  • <深度学习基础> 激活函数
  • 评价指标BLUE了解
  • 5G网关如何提升智慧乡村农业生产效率
  • 微信小程序分享后真机参数获取不到和部分参数不能获取问题问题解决
  • Confluence使用教程(用户篇)
  • 网络基础知识socket编程
  • 基于SpringBoot的员工(人事)管理系统
  • 【计算机网络】序列化与反序列化
  • Linux内核学习(七)—— 定时器和时间管理(基于Linux 2.6内核)
  • Tortoise Git(乌龟git)常用命令总结
  • SSM商城项目实战:物流管理
  • nlp系列(7)三元组识别(Bert+CRF)pytorch
  • Druid配置类、Dubbo配置类、Captcha配置类、Redis配置类、RestTemplate配置类
  • Pyecharts教程(十二):使用pyecharts创建带有数据缩放滑块和位置指示器的K线图
  • MySQL 基本操作
  • HHDESK一键改密功能
  • 瞬态电压抑制器(TVS)汽车级 SZESD9B5.0ST5G 工作原理、特性参数、封装形式
  • ChatGPT 一条命令总结Mysql所有知识点
  • Nginx-报错no live upstreams while connecting to upstream
  • 五种 CSS 位置类型以实现更好的布局
  • 【真题解析】系统集成项目管理工程师 2022 年下半年真题卷(综合知识)
  • 视频中的声音怎么提取出来?这样做提取出来很简单
  • 【Qt学习】05:自定义封装界面类
  • 网络服务第二次作业
  • 【记录】USSOCOM Urban3D 数据集读取与处理