【Java基础】泛型

news2024/9/21 10:40:59

泛型

generic

泛型的好处

  • 编译器自动检查,减少了出错
  • 减少了转换次数,提高效率
  • 不再提示编译警告
  • 使程序员能够实现通用算法

定义

接口和类,方法都可以定义泛型

//泛型类会被在创建实例的时候被确定
// 泛型可以有多个
class Person<T,E>{
    
}
// 泛型接口会在被继承实现的时候确定
interface Inter<T>{
    
}
// 泛型方法可以定义在普通类中,也可以定义在泛型类中
// 泛型方法会在方法被调用的时候确定
public <T> int func(){
    
}
  • T 只能是引用类型,不能是基本数据类型

  • 类的普通成员(属性,方法)可以使用泛型,静态方法和属性不可以使用泛型

  • 使用泛型的数组不能初始化

  • 指定泛型后,可以传入传入该类型或该子类类型的数据

  • 在编译期间就确定了泛型

常见的类型参数简写:

  • E - Element 元素 (used extensively by the Java Collections Framework)
  • K - Key 键
  • N - Number 数字
  • T - Type 类型
  • V - Value 值
  • S,U,V etc. - 2nd, 3rd, 4th types

一般来说,parameters形参,arguments实参

使用

Person<Integer> integerPerson;//parameterized type 参数化类型
Person<String> stringPerson = new Person<String>("一万");//创建实例
Person<Double> doublePerson = new Person<Double>(78.8);
//后面的类型可以不写,简写,编译器会推断,推荐
Person<Double> doublePerson2 = new Person<>(78.8);
//默认的类型是Object,尽量不要使用
ArrayList arrayList = new ArrayList();

有界类型参数

<T extends B1 & B2 & B3>

子类型

通过extends 和implments实现的类型

  • Box<Integer> 不是 Box<Number>的子类型,即使 IntegerNumber 的子类型

在这里插入图片描述

通配符

wildcard

	
	package com.generic_;
	import java.util.ArrayList;
	public class Test02 {
	    public static void main(String[] args) {
	        ArrayList<Object>  list= new ArrayList<>();
	        ArrayList<String> list2 = new ArrayList<>();
	        ArrayList<AA> list3 = new ArrayList<>();
	        ArrayList<BB> list4 = new ArrayList<>();
	        ArrayList<CC> list5= new ArrayList<>();
	
	        func1(list);
	        func1(list2);
	        func1(list3);
	        func1(list4);
	        func1(list5);
	
	//        func2(list);//no
	//        func2(list2);//no
	        func2(list3);
	        func2(list4);
	        func2(list5);
	        
	        func3(list);
	        func3(list2);//no
	        func3(list3);
	        func3(list4);//no
	        func3(list5);//no
	
	
	    }
	//    <?>表示任意泛型都可以
	    public static void func1(ArrayList<?> list){
	    }
	//    <? extends AA>表示只有AA以及继承了AA的泛型才可以,规定了上限
	    public static void func2(ArrayList<? extends AA> list){
	    }
	//    <? super AA>表示只有AA以及AA的父类才可以,规定了下限
	    public static void func3(ArrayList<? super AA> list){
	    }
	}
	class AA{
	}
	class BB extends AA{
	}
	class CC extends BB{
	}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3分钟带您快速了解HIL测试及其架构

什么是HIL测试硬件在环&#xff08;HIL&#xff09;仿真是一种用于测试导航系统的技术&#xff0c;其中测试前并不知道车辆轨迹。在这种情况下&#xff0c;车辆轨迹被实时馈送到GNSS模拟器。HIL可用于复杂实时系统的开发和测试&#xff0c;如卫星控制系统、军事战术导弹、飞机飞…

从JDK源码中探究Runtime#exec的限制

前言 遇到很多次在调用Runtime.getRuntime().exec方法进行弹shell的时候遇到的各种限制&#xff0c;都没好好的认识认识原理&#xff0c;这次主要是总一个总结和原理上的分析。 环境搭建 之后使用docker起一个具有反序列化的漏洞的Java服务(能够执行命令就行)。 之后开启调…

深度学习神经网络基础知识(三)前向传播,反向传播和计算图

专栏&#xff1a;神经网络复现目录 深度学习神经网络基础知识(三) 本文讲述神经网络基础知识&#xff0c;具体细节讲述前向传播&#xff0c;反向传播和计算图&#xff0c;同时讲解神经网络优化方法&#xff1a;权重衰减&#xff0c;Dropout等方法&#xff0c;最后进行Kaggle实…

第47章 后端管理首页与Axios拦截守卫原理

1 404全局拦截 1.1 定义布局页&#xff1a;src\views\ 404View.vue <template> <el-container> <el-main> </el-main> <el-footer> <h1>大人&#xff0c;你要找的页面离家出走了&#xff01;小的正在努力寻找中…</h1> </el-fo…

Node多版本管理工具(轻松切换本地环境Node版本)

引言 在项目 Vue2 升级 Vue3 的过程中&#xff0c;因兼顾新老版本的项目而需不同版本的Node 环境&#xff0c;这种情况下 NVM【nodejs version manager(Node版本管理工具)】是一个很好的选择&#xff0c;它可以很方便的切换 node 环境。 安装 NVM 访问 ⬇ NVM 下载地址 &…

Android Handler的内存抖动以及子线程创建Handler

一、介绍 Handler&#xff0c;作为一个在主线程存活的消息分发工具&#xff0c;在App开发过程使用频率很高&#xff0c;也是面试问的比较多的。 面试常见的比如&#xff1a;子线程如何创建&#xff1f;Handler的机制是什么&#xff1f;内存抖动等&#xff0c;接下来我们会针对H…

Cosmos 基础教程(二)-- Run a Node, API, and CLI

有很多不同的方法来运行Cosmos区块链的节点。您将探索如何使用simapp 进行此操作。 1、编译simapp Cosmos SDK存储库包含一个名为 simapp 的文件夹。在这个文件夹中&#xff0c;您可以找到运行Cosmos SDK模拟版本的代码&#xff0c;这样您就可以在不实际与链交互的情况下测试…

从零开始使用MMSegmentation训练Segformer

从零开始使用MMSegmentation训练Segformer 写在前面&#xff1a;最新想要用最新的分割算法如&#xff1a;Segformer or SegNeXt 在自己的数据集上进行训练&#xff0c;但是有不是搞语义分割出身的&#xff0c;而且也没有系统的学过MMCV以及MMSegmentation。所以就折腾了很久&am…

Javascript 立即执行函数

IIFE,一般称为立即执行函数。你可能会问我&#xff0c;*“嘿&#xff01;我知道正常的函数表达式是什么样子的&#xff0c;但是 IIFE 到底是什么&#xff1f;”。*好吧&#xff0c;这正是我今天要在本文中回答的问题。 函数表达式 在了解立即调用函数表达式之前&#xff0c;让…

栈与队列-算法总结

目录 基础知识 用栈实现队列 用队列实现栈 栈的拿手好戏 删除字符串中的所有相邻重复项 逆波兰表达式求值 滑动窗口最大值 前k个高频元素 基础知识 栈队列stackqueue先进后出先进先出无迭代器无迭代器容器设配器容器设配器vector deque listvector deque list C标准库版本…

“dv/dt”和“di/dt”值:这些值的水平对固态继电器有什么影响?

di/dt水平过高是晶闸管故障的主要原因之一。发生这种情况时&#xff0c;施加到半导体器件上的应力会大大超过额定值并损坏功率元件。在这篇新的博客文章中&#xff0c;我们将解释dv/dt和di/dt值的重要性&#xff0c;以及为什么在为您的应用选择固态继电器之前需要考虑它们。 让…

VMware虚拟机安装Win11最详细过程以及遇到的这台电脑无法运行Windows11的问题

准备工作 在使用VMware虚拟机安装Win11之前我们先把准备工作做好&#xff0c;以免后续思绪混乱导致出错。 1. 到VMware官网或点击链接下载正版VMware Workstation 16 Pro。 2. 双击打开安装包&#xff0c;点击下一步。 3. 阅读用户许可协议&#xff0c;勾选我接受许可协议中的…

k8s-二进制部署

文章目录一、环境二、步骤1、安装cfssl工具2、部署etcd集群3、在node节点安装docker组件4、安装flannel组件部署master节点组件部署node节点部署kube-proxy组件三、测试一、环境 角色服务器地址组件master192.168.174.140kube-apiserver&#xff0c;kube-controller-manager&a…

外包出来,朋友内推我去一家公司,问的实在是太...

外包出来&#xff0c;没想到算法死在另一家厂子&#xff0c;自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有…

2023赏金计划:Coremail SRC漏洞征集与样本奖励火热进行中

赏金活动一&#xff1a;Coremail SRC漏洞奖励计划 01 活动背景 2023年1月&#xff0c;Coremail安全应急响应中心&#xff08;Coremail SRC&#xff09;正式上线启用&#xff0c;面向公众收集安全漏洞信息与安全情报。Coremail SRC旨在联合众多安全专家、白帽子研究员共同发现…

MySQL 运算符及优先级

MySQL 运算符 MySQL 主要有以下几种运算符&#xff1a; 算术运算符比较运算符逻辑运算符位运算符算术运算符 MySQL 支持的算术运算符包括: 运算符作用加法-减法*乘法/ 或 DIV除法% 或 MOD取余 在除法运算和模运算中&#xff0c;如果除数为0&#xff0c;将是非法除数&#x…

分布式事务几种方案

1&#xff09;、2PC 模式 数据库支持的 2PC【2 phase commit 二阶提交】&#xff0c;又叫做 XA Transactions。 MySQL 从 5.5 版本开始支持&#xff0c;SQL Server 2005 开始支持&#xff0c;Oracle 7 开始支持。 其中&#xff0c;XA 是一个两阶段提交协议&#xff0c;该协议…

推荐系统[八]算法实践总结V1:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结【冷启动召回、复购召回、用户行为召回等算法实战】

0.前言:召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回、粗排、精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板;粗排是初筛,一般不会上复杂模型;精排是整个推荐环节的重中之重,在特征和模型上都会做的比较复杂;重排,一般是做打散或满足…

Windows 服务器IIS安装,服务器多界面设置方法

当你在使用服务器时是否有遇到这样一个问题&#xff1f;当你正在服务器里进行工作时&#xff0c;突然一个小伙伴在没有告知你的情况下进入了服务器里&#xff0c;导致你服务器失去连接了&#xff0c;这种情况是非常常见的现象。 主要原因就是因为服务器没有安装多界面&#xf…

k8s多节点二进制部署以及Dashboard-UI

一.多Maser集群架构的了解Kubernetes作为容器集群系统&#xff0c;通过健康检查重启策略是实现Pod故障自我修复能力&#xff0c;通过调度室实现Pod分布式部署&#xff0c;并保持预期副本数&#xff0c;根据Node失效状态自动在其他Node拉起Pod&#xff0c;实现了应用层的高可用。…